Bonjour,

J'ai adapté un code C

Celui-ci fonctionne : https://onlinegdb.com/SySQ2jmL4

J'ai donc ceci :
Code HTML : 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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<!doctype html>
<html lang="fr">
	<head>
		<meta charset="utf-8">
		<title>Sudoku</title>
		<script>
                        var grille = [];
                        /*grille.push([6, 1, 8, 0, 7, 2, 0, 0, 0]);
                        grille.push([0, 0, 0, 1, 9, 6, 0, 7, 0]);
                        grille.push([7, 0, 0, 0, 0, 0, 3, 1, 0]);
                        grille.push([0, 9, 0, 0, 0, 4, 7, 6, 0]);
                        grille.push([1, 0, 0, 0, 0, 0, 0, 0, 5]);
                        grille.push([0, 7, 2, 5, 0, 0, 0, 8, 0]);
                        grille.push([0, 5, 6, 0, 0, 0, 0, 0, 8]);
                        grille.push([0, 3, 0, 8, 2, 5, 0, 0, 0]);
                        grille.push([0, 0, 0, 6, 1, 0, 4, 5, 3]);*/
                        
                        grille.push([9,0,0,1,0,0,0,0,5]);
                        grille.push([0,0,5,0,9,0,2,0,1]);
                        grille.push([8,0,0,0,4,0,0,0,0]);
                        grille.push([0,0,0,0,8,0,0,0,0]);
                        grille.push([0,0,0,7,0,0,0,0,0]);
                        grille.push([0,0,0,0,2,6,0,0,9]);
                        grille.push([2,0,0,3,0,0,0,0,6]);
                        grille.push([0,0,0,2,0,0,9,0,0]);
                        grille.push([0,0,1,9,0,4,5,7,0]);
                        
                        function AbsentLigne(numero, grille, ligne)
                        {
                                for( i=0; i<9; i++ )
                                {
                                        if( grille[ligne][i] == numero )
                                        {
                                                return false;
                                        }
                                }
                                return true;
                        }
                        
                        function AbsentColonne(numero, grille, colonne)
                        {
                                for( i=0; i<9; i++ )
                                {
                                        if( grille[i][colonne] == numero )
                                        {
                                                return false;
                                        }
                                }
                                return true;
                        }
                        
                        function AbsentCarre(numero, grille, ligne, colonne)
                        {
                                i = ligne - (ligne % 3);
                                j = colonne - (colonne % 3);
                                
                                for( ligne=i; ligne<i+3; ligne++ )
                                {
                                        for( colonne=j; colonne<j+3; colonne++ )
                                        {
                                                if( grille[ligne][colonne] == numero )
                                                {
                                                        return false;
                                                }
                                        }
                                }
                                return true;
                        }
                        
                        function Validation(grille, position)
                        {                               
                                // Si on est à 81, on a validé la grille car on sort de celle-ci
                                if( position == 9*9 )
                                {
                                        return true;
                                }
                                
                                //alert('Position : ' + position);
                                
                                // On récupère les coordonnées de la case
                                ligne = Math.floor(position / 9);
                                colonne = position % 9;
                                
                                //alert('Ligne : ' + ligne);
                                //alert('Colonne : ' + colonne);
                                
                                // Si la case n'est pas vide, on passe à la suivante
                                if( grille[ligne][colonne] != 0 )
                                {
                                        return Validation(grille, position+1);
                                }
                                
                                // On essaie chaque chiffre
                                for( numero=1; numero<=9; numero++ )
                                {
                                        // On vérifie si le chiffre est autorisé
                                        if( AbsentLigne(numero, grille, ligne) && AbsentColonne(numero, grille, colonne) && AbsentCarre(numero, grille, ligne, colonne) )
                                        {
                                                // alert('Position : ' + position + ' (Ligne : ' + ligne + ' / Colonne : ' + colonne + ') - Numéro : ' + numero);
                                                
                                                // On enregistre le chiffre dans la case
                                                grille[ligne][colonne] = numero;
                                                
                                                console.log('Position : ' + position);
                                                console.log('Ligne : ' + ligne);
                                                console.log('Colonne : ' + colonne);
                                                console.table(grille);
                                                
                                                if( Validation(grille, position+1) )
                                                {
                                                        return true;
                                                }
                                        }
                                }
                                
                                alert('Pas de solution trouvée pour la case - Position : ' + position + ' (Ligne : ' + ligne + ' / Colonne : ' + colonne + ') !');
                                
                                // Tous les chiffres ont été testés, aucun n'est bon, on réinitialise la case
                                grille[ligne][colonne] = 0;
                                
                                return false;
                        }
                        
                        alert(Validation(grille, 0));
                </script>
	</head>
	<body>
 
	</body>
</html>

Il ne fonctionne cependant pas en JavaScript.
J'arrive dans une situation où la seule valeur restante est 7 et elle n'est pas possible car déjà présente dans une des 3 conditions.

Je pense avoir un problème avec la récursivité, principalement sur le retour en arrière.

Cependant, je n'arrive pas à trouver à quel endroit le problème se pose.

Votre aide est la bienvenue.

Merci par avance pour votre aide,
ZiP