Salut, j'ai essayer de faire un solveur de sudoku basique, le problème c'est qu'une fois qu'il à résolue ma grille, il la remet à zéro, du coup quand je l'affiche après résolution, je me retrouve avec la même qu'au départ, et là, je vois vraiment pas d'où ça vient :/
Ma fonction de résolution :
Mon main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 bool Resoudre(char grille[9][9], int i, int j){ char x; int X; if (i == 8 && j == 8) return true; if (grille[i][j] != '0'){ if(i == 8){ Resoudre(grille,0,j+1); } else Resoudre(grille,i+1,j); } else for (X=1; X <= 9; X++){ if(X==1){ x='1';} else if(X==2){ x='2';} else if(X==3){ x='3';} else if(X==4){ x='4';} else if(X==5){ x='5';} else if(X==6){ x='6';} else if(X==7){ x='7';} else if(X==8){ x='8';} else if(X==9){ x='9';} if(AbsentLigne(x,grille,i) == true && AbsentColonne(x,grille,j) == true && AbsentRegion(x,grille,i,j) == true){ grille[i][j] = x; if(Resoudre(grille, i, j)){ return true; } else grille[i][j] = '0'; } } return false; }
Mon affichage :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 int main() { char grille[9][9] = { {'2','0','0','9','0','0','0','0','0'}, {'1','0','7','4','0','0','6','0','0'}, {'0','0','4','5','0','2','7','0','1'}, {'0','0','8','2','4','3','1','0','5'}, {'0','3','0','0','9','0','0','8','0'}, {'4','0','1','8','7','5','2','0','0'}, {'8','0','5','3','0','4','9','0','0'}, {'0','0','9','0','0','6','8','0','3'}, {'0','0','0','0','0','9','0','0','4'} }; if(AbsentLigne('5', grille, 0) == true) printf("Absent\n"); else printf("Present\n"); if(AbsentColonne('5', grille, 1) == true) printf("Absent\n"); else printf("Present\n"); if(AbsentRegion('5', grille, 0, 1) == true) printf("Absent\n"); else printf("Present\n"); affichage(grille); printf("\n"); Resoudre(grille,0,0); affichage(grille); return 0; }
Merci d'avance !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 void affichage (char grille[9][9]) { int i,j; for (i=0; i<9; i++) { for (j=0; j<9; j++) { printf( ((j+1)%3) ? "%c " : "%c|", grille[i][j]); } putchar('\n'); if (!((i+1)%3)) puts("------------------"); } puts("\n\n"); }
Partager