Algorytm konika szachowego

0

Witajcie. Mam problem z algorytmem konika szachowego. Mianowicie:

bool konik::ruszSkoczka(int x, int y, int nr)
{
    const int rx[8] = {1,2,2,1,-1,-2,-2,-1};
    const int ry[8] = {-2,-1,1,2,2,1,-1,-2};
    int tmp_x, tmp_y;
    szachownica[x][y] = nr;
    if(nr == dl_szachownica * dl_szachownica)
    {
        for(int i=0 ; i<dl_szachownica ; i++)
        {
            for(int j=0 ; j<dl_szachownica ; j++)
                cout << szachownica[j][i] << " ";
            cout << endl;
        }
    return 1;
    }
    else
    {
        for(int i = 0; i < 8; i++)
        {
            tmp_x = x + rx[i];
            tmp_y = y + ry[i];
            if(tmp_x >= 0 && tmp_x < dl_szachownica && tmp_y >= 0 && tmp_y <= dl_szachownica && szachownica[tmp_x][tmp_y] == 0)
            {
                if(ruszSkoczka(tmp_x, tmp_y, nr+1) == true)
                {
                    return true;
                }
            }
        }
        szachownica[x][y] = 0;
    }
    return false;
}
 

Wynik niestety jest następujący:

 
Podaj dlugosc szachownicy: 5
1 0 17 10 3 
18 0 2 15 8 
25 16 9 4 11 
0 19 14 7 22 
0 24 21 12 5 
--- WYSWIETLAM TABLICE ---
1 18 25 0 0 
0 0 16 19 24 
17 2 9 14 21 
10 15 4 7 12 
3 8 11 22 5 
--- KONIEC WYSWIETLANIA ---

Czy mógłby ktoś wskazać błąd w algorytmie :?

0

Pochrzanili ci się wymiary x,y

0

@_13th_Dragon dzięki za odpowiedź jednak nie widzę gdzie pomyliłem x i y.
Generalnie chodzi mi o to, że zostają pola "0" w tablicy a powinny być to numerki (numer ruchu [poprawnego] skoczka)

0

Co do zer to chrzani waść: http://ideone.com/gGJ8Dk

0

Ok działa, odpaliłem w debuggerze i zobaczyłem, że wychodzi mi poza tablicę :(
Zmiana z tego: tmp_y <= dl_szachownica
na to : tmp_y < dl_szachownica (ostra nierówność)

0

ups. ale algorytm nadal jest niepoprawny gdyż:

1 12 23 6 3  <-- tutaj 6
22 17 2 13 8 
11 24 9 4 19 
16 21 18 7 14 
25 10 15 20 5 <-- tutaj 5
 

nie ma takiego ruchu skoczkiem :/

0

Dzieki @_13th_Dragon to co wstawiłem wyżej z poprawką (ostrą nierównością) daje w miarę poprawny wynik. Jeszcze raz dzięki !

0

tak na przyszłosć

for(int i=0 ; i<dl_szachownica ; i++)
{
       for(int j=0 ; j<dl_szachownica ; j++)
           cout << szachownica[j][i] << " ";
       cout << endl;
}

http://austingwalters.com/cache-optimizing/

1 użytkowników online, w tym zalogowanych: 0, gości: 1