Ricorsione nel campo minato (c++)

m4tbrik
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!

Risposte
vict85
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.

Quinzio
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).

vict85
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.

m4tbrik
grazie a tutti ho risolto il problema trovando in anticipo i numeri!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.