[C++] Problem skoczka szachowego

Maciej94
Użytkownik
Użytkownik
Posty: 73
Rejestracja: 11 gru 2010, o 12:46
Płeć: Mężczyzna
Lokalizacja: Poznań
Podziękował: 7 razy
Pomógł: 4 razy

[C++] Problem skoczka szachowego

Post autor: Maciej94 »

Problem skoczka szachowego – zadanie polegające na obejściu skoczkiem wszystkich pól planszy tak, żeby na każdym polu stanął tylko raz.

W jaki sposob stworzyć program do rozwiązania tego problemu i spisaniu ruchów? Nalezy rozpatrzec mozliwosci z kazdego pola. Myśle, ze najszybszym sposobem będzie określić, że dopóki zmienna i nie bedzie równa n x n, i wybierać losowo ruchy do miejsca o najmniejszych wartościach możliwych ruchów (jest w moim kodzie), a w przypadku braku możliwości cofnięcie sie i rozpatrzenie innej możliwości.

Mam problem w stworzeniu pętli realizacji tych skoków.
Jakieś pomysły, sugestie? Chciałbym to zrozumieć. Będę bardzo wdzięczny.
O to kod, ktory na razie wykonałem

Kod: Zaznacz cały

#include <iostream>
using namespace std;

int n,x,y,s[10][10],skok,p,q;


//////////////////////////////////////////////////////////////////////////////
void Pokazanie_miejsc_tablicy(int x)
{
    cout<< endl<< "Kolejne ideksy tablicy dwuwymiarowej"<< endl;
    for(y=n-1 ; y!=-1 ; y--)
    {
               for(x=0 ; x!=n ; x++)
               {
               cout <<"("<< x<<")"<<"("<<y<<") ";
               }
    cout << endl;
    }}    

//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
void Ilosc_mozliwych_ruchow(int x)
{
     
cout << endl << "Ilosc mozliwych ruchow z danego pola" << endl;
    for(y=n-1 ; y!=-1 ; y--)
    {
               for(x=0 ; x!=n ; x++)
               {
                       if(x<n-2 and x>1 and y<n-2 and y>1)
                       {                             
                                
                            s[x][y]=8;    
                       }
                       else
                       {
                       if((x==0 and y==0) or (x==0 and y==n-1) or (x==n-1 and y==n-1) or (x==n-1 and y==0))
                       {    
                            s[x][y]=2;    
                       }
                       if((x==0 and y==1)or(x==0 and y==n-2)or(x==1 and y==0)or(x==1 and y==n-1)or(x==n-2 and y==0)or(x==n-1 and y==1)or(x==n-2 and y==n-1)or(x==n-1 and y==n-2))
                       {    
                            s[x][y]=3;    
                       }
                       if((x==0 and y>1 and y<n-2) or (x==n-1 and y>1 and y<n-2) or (x>1 and x<n-2 and y==n-1) or (x>1 and x<n-2 and y==0) or (x==1 and y==n-2) or (x==1 and y==1) or (x==n-2 and y==n-2) or (x==n-2 and y==1))
                       {    
                            s[x][y]=4;    
                       }
                       if((x==1 and y>1 and y<n-2) or (x==n-2 and y>1 and y<n-2) or (x>1 and x<n-2 and y==n-2) or (x>1 and x<n-2 and y==1))
                       {    
                            s[x][y]=6;    
                       }
                       
                       if(n==3)
                       {
                       s[0][1]=2; s[1][1]=0; s[1][2]=2; s[1][0]=2;s[2][1]=2;
                       }
                       if(n==1 or n==2)
                       {
                       s[x][y]=0;
                       }
                       }
               
               cout <<s[x][y]<<" ";
               }
    cout << endl;
    }       

}
//////////////////////////////////////////////////////////////////////////////
void skoki(int x)
{
                switch(skok)
{
case 1:
    p=p+2; q=q+1;
    break;   
case 2:
    p=p+2; q=q-1;
    break;
case 3:
    p=p-2; q=q+1;
    break;
case 4:
    p=p-2; q=q-1;
    break;    
case 5:
    p=p+1; q=q+2;
    break;    
case 6:
    p=p+1; q=q-2;
    break;    
case 7:
    p=p-1; q=q-2;
    break;    
case 8:
    p=p-1; q=q+2;
    break;    
default:
    x; y;
    break;
}}       
int main()
{
    
    cout << "Podaj dlugosc boku szachownicy ";
    cin >> n;
    
    Pokazanie_miejsc_tablicy(x);
    Ilosc_mozliwych_ruchow(x);
    
      
      
      
    getchar();
    cin.ignore();
    return 0;
}
ODPOWIEDZ