2) Carre_n_All :
Pour afficher les différentes grilles solutions et pour donner le nombre de solutions trouvées,
un entier en guise de compteur et un booleen ont été rajouté en paramètre de la classe.
Le principe est le même que pour Carre_n, sauf que cette fois-ci, une fois qu’on a trouvé une
solution, on n’arrête pas le balayage des autres possibilités.
Pour cela, lorsque l’on trouve une solution, on bloque l’appel récursif de la fonction sur les
cases voisines de la dernière case remplie avec le booleen « affiche ».
Puis on réinitiale ce boolean, on efface et décremente le nombre, afin de chercher les solutions
à l’étape précédente.
A chaque fois qu’une solution est affichée, le compteur est incrémenté.
Algorithme informel :
Fonction remplirGrille ( x : entier, y : entier)
Début
Si num > taille * taille et non-affiche alors
Afficher(Grille)
Affiche vrai
Compteur compteur + 1
Sinon Si x > 0 et x < taille et y > 0 et y < taille et non-affiche alors
Grille[x][y] num
Num num + 1
Pour i de 1 à 8 faire
Si i = 1 alors echec remplirGrille(x, y+3)
Si i = 2 alors echec remplirGrille(x-3, y)
Si i = 3 alors echec remplirGrille(x, y-3)
Si i = 4 alors echec remplirGrille(x+3, y)
Si i = 5 alors echec remplirGrille(x+2,y+2)
Si i = 6 alors echec remplirGrille(x-2, y+2)
Si i = 7 alors echec remplirGrille(x-2, y-2)
Si i = 8 alors echec remplirGrille(x+2, y-2)
Grille[x][y]
um num – 1
Affiche faux
Fpour
Fsi
Fin
Lexique :
x : entier, coordonnée sur l’axe des abscisses
y : entier, coordonnée sur l’axe des ordonnées
i : entier, itérateur
taille : entier, taille du côté de la grille
Grille : tableau[0…taille][0…taille]
Affiche : boolean, vrai lorsque la grille est remplie et est affichée