Il problema consiste nel cercare all'interno di una matrice di interi già definita un percorso che partendo casella di posizione [0][0] raggiunga la casella di posizione [n][n]. La somma dei valori contenuti nelle caselle deve essere per es 250.

Qualcuno ha voglia di guardare la soluzione? C'è un errore nell'uso delle matrici.. e poi non so se funziona la procedura ricorsiva che ho scritto. Grazie

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;
}