problème avec le backtracking(sudoku)
Bonjour à toutes et à tous,
j'ai à écrire un code pour résoudre un sudoku.(en c)
on suppose que la grille en entrée est un tableau de 9*9 chiffres entre 0 et 9 (0 pour les cases vides).
inspirée de celle présente dans le code de i2i.fr la fonction resoudre est la suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| void resoudre(void)
{
int ligne, col, nbre, nbre_tamp;
for (ligne = 0; ligne < size; ligne++) {
for (col = 0; col < size; col++) {
if (sudo[ligne][col]) continue;
for (nbre = 1; nbre <= size; nbre++) {
if (!verifier(ligne,col,nbre,sudo)) continue;
nbre_tamp = sudo[ligne][col];
sudo[ligne][col] = nbre;
resoudre();
if (grille_finie(sudo)) return;
sudo[ligne][col] = nbre_tamp;
}
return;
}
}
return;
} |
indications:
-la grille à resoudre est sudo
-la fonction verifier(i,j,x,sudo) renvoie 1 s'il est possible de placer x dans sudo[i][j] et 0 sinon
-la fonction grille_finie renvoi 1 si la grille est remplie (plus de cases vides) et 0 sinon
-resoudre() est recursive
voilà, quand j'execute ça ne resoud pa la grille, la grille en entrée reste la même en fin de traitement-->je ne comprends pas du tout, je bloque là
un grand merci d'avance