codice:
#include <stdio.h>
int v[100]={0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0};
int k=0;
int nr=8, nc=8;
int somma=0;
int inCastello( int M[][], int nr, int nc, int r, int c );
int main(void){
int M[8][8]={{1,17,1,5,41,6,75,54},
{12,65,1,15,7,4,45,12},
{9,23,1,45,41,12,75,43},
{32,2,87,4,7,8,37,53},
{23,37,6,76,21,38,52,36},
{9,5,1,13,23,19,12,7},
{21,25,34,65,1,45,29,35},
{41,9,5,12,35,12,17,2}};
int i, j;
for(i=0; i<8; i++){
for(j=0; j<8; j++){
printf("%5d ", M[i][j]);
}
printf("\n");
}
if(percorri(M, nr, nc, 0, 0)){
printf("Uscita trovata\n");
}
//Stampare v
system("pause");
}
int inCastello( int M[][], int nr, int nc, int r, int c ) {
return ( 0 <= r && r < nr && 0 <= c && c < nc );
}
int percorri(int M[][], int nr, int nc, int r, int c){
int uscita=0;
if(inCastello(M,nr,nc,r,c)){
somma=somma+M[r][c];
if(somma==250 && r==nr && c==nc){
uscita=1;
}
else if(somma<250){
v[k]=M[r][c];
k++;
if( percorri(M,nr,nc,r+1,c)
|| percorri(M,nr,nc,r-1,c)
|| percorri(M,nr,nc,r,c+1)
|| percorri(M,nr,nc,r,c-1))
{
uscita=1;
}
}
else{
v[k]=0;
k--;
}
}
else{
v[k]=0;
k--;
}
return uscita;
}