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 :

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 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
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;
}
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
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");
}
Merci d'avance !