Scacchi [Cavallo]

Scrivere un programma che presa in
input la dimensione della scacchiera ed una casella della scacchiera, sia essa C, calcoli
il minimo numero di mosse che un cavallo posizionato in C necessita per raggiungere
TUTTE le altre caselle.


#include

void cavallo(int N, int matrice[][N]);

int main()
{
int N=0;
int i=0;
int j=0;
int riga=0;
int colonna=0;
scanf("%d",&N);

int matrice[N][N];

scanf("%d",&riga);
scanf("%d",&colonna);

for(i=0; i for(j=0; j matrice[i][j] = 0;

matrice[riga][colonna] = 0;
int a=riga;
int b=colonna;
if(matrice[a+2][b+1] == 0 && (a+2) matrice[a+2][b+1] = matrice[riga][colonna] + 1;
if (matrice[a+1][b+2] == 0 && (a+1) matrice[a+1][b+2] = matrice[riga][colonna] + 1;
if (matrice[a-1][b-2] == 0 && (a-1)>=0 && (b-2)>=0)
matrice[a-1][b-2] = matrice[riga][colonna] + 1;
if (matrice[a-2][b-1] == 0 && (a-2)>=0 && (b-1)>=0)
matrice[a-2][b-1] = matrice[riga][colonna] + 1;
if (matrice[a-1][b+2] == 0 && (a-1)>=0 && (b+2) matrice[a-1][b+2] = matrice[riga][colonna] + 1;
if (matrice[a+1][b-2] == 0 && (b-2)>=0 && (a+1) matrice[a+1][b-2] = matrice[riga][colonna] + 1;
if (matrice[a+2][b-1] == 0 && (b-1)>=0 && (a+2) matrice[a+2][b-1] = matrice[riga][colonna] + 1;
if (matrice[a-2][b+1] == 0 && (a-2)>=0 && (b+1) matrice[a-2][b+1] = matrice[riga][colonna] + 1;

cavallo(N, matrice);

matrice[riga][colonna] = 0;
for(i=0; i {
for(j=0; j {
printf("%d ",matrice[i][j]);
}
printf("\n");
}
return 0;
}

void cavallo(int N, int matrice[][N])
{
int i=0;
int j=0;
int a=0;
int b=0;
int M=0;

M=N*N;


int star=1;

while(M>0)
{

a=0;
for(i=0; i {
b=0;
for(j=0; j {
if (matrice[i][j] != 0 && matrice[i][j] == star)
{
if(matrice[a+2][b+1] == 0 && (a+2) matrice[a+2][b+1] = matrice[i][j] + 1;
if (matrice[a+1][b+2] == 0 && (a+1) matrice[a+1][b+2] = matrice[i][j] + 1;
if (matrice[a-1][b-2] == 0 && (a-1)>=0 && (b-2)>=0)
matrice[a-1][b-2] = matrice[i][j] + 1;
if (matrice[a-2][b-1] == 0 && (a-2)>=0 && (b-1)>=0)
matrice[a-2][b-1] = matrice[i][j] + 1;
if (matrice[a-1][b+2] == 0 && (a-1)>=0 && (b+2) matrice[a-1][b+2] = matrice[i][j] + 1;
if (matrice[a+1][b-2] == 0 && (b-2)>=0 && (a+1) matrice[a+1][b-2] = matrice[i][j] + 1;
if (matrice[a+2][b-1] == 0 && (b-1)>=0 && (a+2) matrice[a+2][b-1] = matrice[i][j] + 1;
if (matrice[a-2][b+1] == 0 && (a-2)>=0 && (b+1) matrice[a-2][b+1] = matrice[i][j] + 1;
}
}
}
star++;
M--;
}
}

Commenti