Ricerca appunti sul web

Ricerca personalizzata

sabato 28 febbraio 2009

Sorgenti c : 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 <stdio.h>

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<N; i++)
for(j=0; j<N; j++)
matrice[i][j] = 0;

matrice[riga][colonna] = 0;
int a=riga;
int b=colonna;
if(matrice[a+2][b+1] == 0 && (a+2)<N && (b+1)<N)
matrice[a+2][b+1] = matrice[riga][colonna] + 1;
if (matrice[a+1][b+2] == 0 && (a+1)<N && (b+2)<N)
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)<N)
matrice[a-1][b+2] = matrice[riga][colonna] + 1;
if (matrice[a+1][b-2] == 0 && (b-2)>=0 && (a+1)<N)
matrice[a+1][b-2] = matrice[riga][colonna] + 1;
if (matrice[a+2][b-1] == 0 && (b-1)>=0 && (a+2)<N)
matrice[a+2][b-1] = matrice[riga][colonna] + 1;
if (matrice[a-2][b+1] == 0 && (a-2)>=0 && (b+1)<N)
matrice[a-2][b+1] = matrice[riga][colonna] + 1;

cavallo(N, matrice);

matrice[riga][colonna] = 0;
for(i=0; i<N; i++)
{
for(j=0; j<N; 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<N; i++, a++)
{
b=0;
for(j=0; j<N; j++, b++)
{
if (matrice[i][j] != 0 && matrice[i][j] == star)
{
if(matrice[a+2][b+1] == 0 && (a+2)<N && (b+1)<N)
matrice[a+2][b+1] = matrice[i][j] + 1;
if (matrice[a+1][b+2] == 0 && (a+1)<N && (b+2)<N)
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)<N)
matrice[a-1][b+2] = matrice[i][j] + 1;
if (matrice[a+1][b-2] == 0 && (b-2)>=0 && (a+1)<N)
matrice[a+1][b-2] = matrice[i][j] + 1;
if (matrice[a+2][b-1] == 0 && (b-1)>=0 && (a+2)<N)
matrice[a+2][b-1] = matrice[i][j] + 1;
if (matrice[a-2][b+1] == 0 && (a-2)>=0 && (b+1)<N)
matrice[a-2][b+1] = matrice[i][j] + 1;
}
}
}
star++;
M--;
}
}

0 commenti: