Bonjour tout le monde,
Dans cadre de mon projet de développement d'une "petite" application de résolution de Sudoku, je suis tombé sur cette solution écrite en Python :
https://github.com/foxxpy/Algorithmi...%20de%20Sudoku
Cet algorithme fonctionne à merveille et j'avais l'ambition de le transcrire en C# (langage dans lequel je développe mon application), je me dois de reconnaître que je n'y suis pas arrivé la preuve avec le code ci-après.
Le cœur de mon problème est cette portion du code Python :
Et en particulier la sortie de la boucle for n in range(1,10).
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 def solve(): global grid for y in range(9): for x in range(9): if grid[y][x] == 0: for n in range(1,10): if n_valide(y, x, n): grid[y][x] = n solve() grid[y][x] = 0 return for i in range(9): for j in range(9): print(grid[i][j], end="") print() exit(0)
Voici ma tentative de transcription :
Comme vous devez vous douter cela ne fonctionne pas la ligne grid[l, c] = 0; est SYSTEMATIQUEMENT appelée alors qu'elle ne devrait l'être qu'en cas d'impossibilité de placer un chiffre dans une case, ce qui provoque (normalement et c'est le cas dans le code Python) un dépilage des valeurs précédemment déposées pour revenir à une situation propre et repartir sur d'autres valeurs !
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 static void solve() { bool numberInGrid; for (int l = 0; l < 9; l++) { for (int c = 0; c < 9; c++) { if (grid[l, c] == 0) { int valeur; numberInGrid = true; for (int val = 1; val < 10; val++) { valeur = val; numberInGrid = IsInGrid(l, c, val); if (!numberInGrid) { grid[l, c] = val; solve(); grid[l, c] = 0; } } return; } } } }
Je tourne en rond depuis plusieurs jours, j'ai bien sûr essayé de suivre l'exécution en déboguant, en simplifiant le jeu d'essai, en notant manuellement les différentes étapes, mais rien n'y fait je n'arrive pas à trouver la solution :-(
En fait je ne vois plus rien, j'ai donc besoin d'un regard extérieur !
Aussi je vous serais très reconnaissant si vous pouviez éclairer ma lanterne :-)
Partager