Program jak na razie mi zadziałał tylko z rozmiarem planszy 8 i współrzędnych 0 i 0. Co mogę mieć źle wpisane w kodzie, bo po wpisaniu np. rozmiar planszy 10 i współrzędnych początkowych 4 i 4 program się zawiesza, tak jakby gdzieś była pętla nieskończona. Proszę, sprawdźcie, gdzie może być błąd w kodzie:
#include <iomanip>
#include <iostream>
#include <cstdio>
using namespace std;
int ruchy[12][12];
int szach[10][10];
int n;
void WartRuchy(void)
{
ruchy[0][0] = -2; ruchy[0][1] = 1;
ruchy[1][0] = -1; ruchy[1][1] = 2;
ruchy[2][0] = 1; ruchy[2][1] = 2;
ruchy[3][0] = 2; ruchy[3][1] = 1;
ruchy[4][0] = 2; ruchy[4][1] = -1;
ruchy[5][0] = 1; ruchy[5][1] = -2;
ruchy[6][0] = -1; ruchy[6][1] = -2;
ruchy[7][0] = -2; ruchy[7][1] = -1;
}
int Ruch(int i, int wsp1, int wsp2)
// i - numer ruchu
// wsp1, wsp2 - aktualne współrzedne skoczka
{
int nr, wspnast1, wspnast2;
// nr - kolejny ruch sposród osmiu możliwych ruchow
// wspnast1, wspnast2 - współrzedne nastepnego ruchu
nr = 0;
while (nr!=7) // podczas gdy są możliwe ruchy
{
wspnast1 = wsp1+ruchy[nr][0];
wspnast2 = wsp2+ruchy[nr][1];
if (wspnast1>=0 && wspnast1<n && wspnast2>=0 && wspnast2<n)
if (szach[wspnast1][wspnast2]==0) // zaznaczenie ustawienia następnego ruchu
{
szach[wspnast1][wspnast2] = i;
if (i<n*n)
{
// rekurencyjne wywołanie funkcji dla
// nastepnego ruchu
if (!Ruch(i+1,wspnast1,wspnast2))
{
// usunięcie zaznaczenia ruchu
szach[wspnast1][wspnast2] = 0;
}
else
return 1;
}
else
return 1;
}
nr = nr+1; // wybranie następnego ruchu spośród
// osmiu możliwych ruchow
}
return 0;
}
int main()
{
int i, j, pocz1, pocz2;
WartRuchy();
cout << "Podaj rozmiar szachownicy (maksymalnie 10)" << endl;
cin >> n;
cout << "Podaj wspolrzedne poczatkowego ustawienia skoczka: " << endl;
cin >> pocz1 >> pocz2;
// zaznaczenie w tablicy Szach punktu początkowego
szach[pocz1][pocz2] = 1;
// wywołanie rekurencyjnej funkcji Ruch
if (Ruch(2,pocz1,pocz2))
{
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
cout << setw(4) << szach[i][j];
cout << endl;
}
}
else
cout << "Ustawienie niemozliwe";
cin.ignore();
getchar();
return 0;
}