Percorso matrice c++

di Anonimizzato13369 il
17 risposte
Dovrei risolvere questo esercizio:

Si scriva un programma che legga in input una matrice e verifichi se esiste un percorso sulla matrice dalla prima all'ultima riga, formato tutto da elementi pari a 1.
Il percorso deve passare esattamente una volta per ciascuna riga.

Dopo aver fatto l'inserimento della matrice mi son bloccato...non so come andare avanti :/
Dovrei svolgerlo senza usare le funzioni, help me!!

EDIT: cercando su internet ho trovato soluzioni solo con le funzioni..ma essendo che non le ho ancora fatte non le capisco..ad esempio questo codice
int percorso(int mat[N][M], int i, int j) 
{
  int risp;

  if (mat[i][j] == 1) 
  {
     if (i==N-1) 
     {
      risp = 1;
     } 
     else if ((j>0 && percorso(mat, i+1, j-1)) || percorso(mat, i+1, j) || (j<M-1 && percorso(mat, i+1, j+1)))
     {
      risp = 1;
     }
     else
     {
      risp = 0;
     }
  } 
  else 
  {
    risp = 0;
  }
  return(risp);
}
tradotto in un codice normale senza funzione come diventa?

17 Risposte

  • Sei sulla prima cella in alto a sinistra

    Finché non sei sull'ultima cella in alto a destra + 1{
    Se la cella sotto a destra contiene '1'{
    Spostati su quella cella
    }
    Se invece la cella sotto in centro contiene '1'{
    Spostati su quella cella
    }
    Stessa cosa per quella in basso a destra
    }Altrimenti{
    Se sei sulla prima riga : spostati a destra
    Altrimenti : spostati sopra
    }

    Se sei sull'ultima riga ritorna VERO

    }

    Ritorna FALSO



    EDIT: ho visto adesso la tua aggiunta, la mia idea non rispetta il codice appena scritto
  • La tua è una funzione ricorsiva, tradurla è abbastanza complesso...
  • ale99 ha scritto:


    La tua è una funzione ricorsiva, tradurla è abbastanza complesso...
    ah ok...anche trovando altri metodi mi va bene lo stesso..l'importante è che riesca a risolvere sto esercizio senza le funzioni
  • Il fatto è che questo tipo di problemi si risolvono con funzioni ricorsive ...
  • oregon ha scritto:


    Il fatto è che questo tipo di problemi si risolvono con funzioni ricorsive ...
    Quindi anche la spiegazione di ale99 va messa come una funzione ricorsiva se trasformata in algoritmo?
  • No, non serve.

    PS: devi stare attento quando ti trovi sulla prima e ultima colonna...
  • ale99 ha scritto:


    No, non serve.

    PS: devi stare attento quando ti trovi sulla prima e ultima colonna...
    ale ti ho mandato un mp
  • Non ci continua in privato una discussione di un forum ...
  • oregon ha scritto:


    Non ci continua in privato una discussione di un forum ...
    Ah sorry non lo sapevo, excuse me .. siccome riguardava il suo codice pensavo che potevo scrivergli direttamente a lui...
  • Intanto ho sbagliato : nello pseudocodice il primo controllo è in basso a sinistra

    Con "ti trovi in alto a sinistra" intendo dire che le coordinate di partenza sono [0,0], non che ci sono due for()

    Poi ti dico il resto
  • Leoni ha scritto:


    oregon ha scritto:


    Non ci continua in privato una discussione di un forum ...
    Ah sorry non lo sapevo, excuse me .. siccome riguardava il suo codice pensavo che potevo scrivergli direttamente a lui...
    E allora il forum a cosa serve? Gli altri utenti che leggono se tutti si scrivono in privato?
  • oregon ha scritto:


    Leoni ha scritto:


    oregon ha scritto:


    Non ci continua in privato una discussione di un forum ...
    Ah sorry non lo sapevo, excuse me .. siccome riguardava il suo codice pensavo che potevo scrivergli direttamente a lui...
    E allora il forum a cosa serve? Gli altri utenti che leggono se tutti si scrivono in privato?
    Hai ragione
  • Ooooooooooooooooooooopppppppppppssssssssssssssssssssssssssssssssssssss...

    Ora che l'ho provato mi sono reso conto di aver scritto una cacchiata colossale ... ovvio che non funziona! Adesso non mi viene in mente niente magari Oregon ti saprà aiutare

    Dinuovo sorry
  • ale99 ha scritto:


    ooooooooooooooooooooopppppppppppssssssssssssssssssssssssssssssssssssss...

    Ora che l'ho provato mi sono reso conto di aver scritto una cacchiata colossale ... ovvio che non funziona! Adesso non mi viene in mente niente magari Oregon ti saprà aiutare

    Dinuovo sorry
    ... quindi per forza la funzione ricorsiva mi rimane come unica possibilità....
Devi accedere o registrarti per scrivere nel forum
17 risposte