Ricorsione nel campo minato (c++)
ciao a tutti vorrei chiedere il vostro aiuto per risolvere un problema con il codice per scoprire le caselle nel campo minato
questa è la funzione ricorsiva che dovrebbe controllare attraverso 2 cicli for annidati il contenuto delle celle attorno al punto selezionato dall'utente. M e N sono costanti uguali che indicano le dimensioni della matrice vector > field riempita con caratteri 'x' per i nascosti e 'b' per le bombe. sia il field che M che N sono variabili globali dichiarate prima del main
il controllo attorno a una cella funziona se trova almeno una bomba e quindi count != 0 altrimenti se non ne trova il programma termina senza iniziare la ricorsione.
ci sto lavorando da due giorni per trovare l'errore ma senza risultati.
spero mi possiate aiutare. se avete bisogno di chiarimenti sul codice volete il codice intero sono pronto a darveli
grazie!
questa è la funzione ricorsiva che dovrebbe controllare attraverso 2 cicli for annidati il contenuto delle celle attorno al punto selezionato dall'utente. M e N sono costanti uguali che indicano le dimensioni della matrice vector
il controllo attorno a una cella funziona se trova almeno una bomba e quindi count != 0 altrimenti se non ne trova il programma termina senza iniziare la ricorsione.
ci sto lavorando da due giorni per trovare l'errore ma senza risultati.
spero mi possiate aiutare. se avete bisogno di chiarimenti sul codice volete il codice intero sono pronto a darveli
grazie!
Risposte
Qualche problema potrebbe essere del tipo di fields. Quindi io ti direi che usare un vector e trovare il punto con la formula i*row_dim + j. Di fatto crei una classe che ha un vector come elemento privato e un operator overloading per trovare l'elemento se vuoi renderti il tutto più semplice. Ovviamente con costruttori e tutto. In realtà potresti anche cambiare il design e per esempio avere due array: uno per la visibilità (usando bool) e uno per il numero di bombe vicine+se è bomba (con char o unsigned int). Cose come calcolare il numero di bombe è meglio farle in anticipo.
Inoltre direi che non vale la pena usare variabili globali.
Inoltre direi che non vale la pena usare variabili globali.
Si ma il tuo obbiettivo qual è ?
Vuoi trovare tutte le celle libere da bombe che sono contigue a quella di partenza ?
Se è così non funziona tanto il tuo algoritmo perchè se una cella ha una bomba di fianco, il tuo algoritmo smette di cercare, però delle 8 caselle adiacenti magari solo 1 ha una bomba.
Se vuoi fare quello che penso, ci vuole un algoritmo ben più raffinato.
Cioè il tuo codice non ha nessun "errore" però è solo una parte (piccola).
Vuoi trovare tutte le celle libere da bombe che sono contigue a quella di partenza ?
Se è così non funziona tanto il tuo algoritmo perchè se una cella ha una bomba di fianco, il tuo algoritmo smette di cercare, però delle 8 caselle adiacenti magari solo 1 ha una bomba.
Se vuoi fare quello che penso, ci vuole un algoritmo ben più raffinato.
Cioè il tuo codice non ha nessun "errore" però è solo una parte (piccola).
Se hai trovato tutti i numeri in anticipo ti basta non fare la ricorsione su quelli che hanno un numero (>0). Io lo avevo implementato al liceo in C e non avevo avuto grandi problemi.
grazie a tutti ho risolto il problema trovando in anticipo i numeri!