Witam,
staram sie napisac program, ktory zwraca najkrotsza droge krola z podanego pola szachownicy do jego pola srodkowego dla szachownicy 7x7 (jego pole srodkowe to bedzie (3,3) ).
Mam taki kod:
const int N=7;
int dx[] = {1,0,1,-1,-1,0,-1,1};
int dy[] = {1,1,0,-1,0,-1,1,-1};
bool czyWolne(int w, int k, int i) // funkcja sprawdza czy nie wyszlismy poza szachownice
{
if ( (w + dx[i] < N) and (w + dx[i] >=0) and (k + dy[i] < N) and (k + dy[i] >=0) )return true;
else return false;
}
int przejdz(int w, int k, int odleglosc, int mini) // (wiersz z ktorego startuje krol, kolumna, obecna liczba ruchow, najmniejsza obecna liczba ruchow )
{
if (odleglosc >= mini) { return mini; } // jesli liczba krokow do srodka jest wieksza od najmniejszej obecnej drogi to zakoncz instancje
if ( (w == 3) and (k == 3) ) // doszlismy do srodka, sprawdzamy czy nasza droga jest obecnie najkrotsza
{
if (odleglosc < mini)
{
mini = odleglosc;
}
return mini;
}
else
{
for (int i=0; i<8; i++)
{
if (czyWolne(w, k, i) == true)
{
return przejdz(w + dx[i], k+ dy[i], odleglosc+1, mini); // wykonujemy ruchy z tablicy ruchow, zwiekszamy licznik ruchow
}
}
}
}
Bylbym bardzo wdzieczny za wskazanie jak taka rekurencja mialaby wygladac. Mam chyba problem z operowaniem rekurencja, ktora jest nieskonczona i przerwanie jej w odpowiednim momencie.
Pozdrawiam