Bonjour à tous. :)
Je me présente je suis étudiant en deuxième année et je travaille actuellement sur un projet d'informatique qui nous a été donné : coder un démineur. Jusqu'ici tout se passait bien jusqu'à ce que j'arrive à cet algorithme de remplissage par diffusion (variante 8 connexe), qui doit me servir à découvrir les cases vides automatiquement (comme dans le vrai jeu quoi !). Je n'ai qu'entre aperçu l'algorithmique en cours, pas au programme de mon semestre.
Pour écrire cet algorithme de remplissage j'ai utilisé une fonction récursive (et je me suis inspiré de ce lien : algorithme remplissage) qui compile bien mais qui provoque une erreur de segmentation lors de l'exécution (à mon avis, la condition terminale de ma fonction n'est pas bonne car j'ai effectué des tests qui montrent que la fonction récursive ne s'arrête jamais.)
Pouvez vous m'aider ?? :calim2:
ci dessous le code entré dans mon programme
Petite précision : grille_min est le tableau qui regroupe les valeurs codant l'emplacement des mines et les infos sur les cases voisines aux mines (nombres de 1 à 8 qui indique le nombre de mines voisinent)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 RECURSIVE FUNCTION devoile_vide(il,ic,grille_min) RESULT(grille_affichage) INTEGER, INTENT(IN)::il,ic INTEGER,DIMENSION(:,:),INTENT(IN)::grille_min INTEGER,DIMENSION(1:n+2,1:n+2)::grille_affichage IF (grille_min(il,ic)/=0) THEN grille_affichage(il,ic)=2 ELSE grille_affichage(il,ic)=2 grille_affichage=devoile_vide(max(il-1,2),ic,grille_min) grille_affichage=devoile_vide(min(il+1,n+1),ic,grille_min) grille_affichage=devoile_vide(il,min(ic+1,n+1),grille_min) grille_affichage=devoile_vide(il,max(ic-1,2),grille_min) grille_affichage=devoile_vide(max(il-1,2),min(ic+1,n+1),grille_min) grille_affichage=devoile_vide(max(il-1,2),max(ic-1,2),grille_min) grille_affichage=devoile_vide(min(il+1,n+1),min(ic+1,n+1),grille_min) grille_affichage=devoile_vide(min(il+1,2),max(ic-1,2),grille_min) END IF END FUNCTION
il,ic : sont les coordonnées entrer par l'utilisateur pour dévoiler une case choisie
Merci d'avance pour votre aide et en vous souhaitant une bonne journée.