Entrez le Sudoku que vous voulez résoudre dans le formulaire sur la gauche. Appuyez sur le bouton "set puzzle" pour soumettre le formulaire et enregistrer vos données. Lorsque vous soumettez le formulaire, les cases que vous avez entrées apparaitront noir gras.

Lorsque le Sudoku est rempli dans la presse "solve" et l'algorithme essayera de résoudre le puzzle. L'algorithme va remplir les cases qu'il peut, tout le reste sera laissé vide. Les cases remplies par l'algorithme apparaitront en bleu.

Si vous avez besoin de corriger une entrée que vous avez fait utiliser le bouton de retour pour revenir jusqu'à ce que le formulaire apparaisse et le modifier. Si vous cliquez sur "set puzzle" une fois que vous avez résolu les cases deviendront noires et en gras.

Ce logiciel conserve un tableau tridimensionnel avec une entrée pour chaque case dans le puzzle. Les dimensions 1 et 2 correspondent à la rangée et à la colonne de la grille. Dimension 3 utilise l'index 0 pour la solution pour cette case, et 1-9 pour chacune des 9 valeurs possibles. Les indices 1 à 9 commencent à 1, ce qui signifie que chaque valeur est possible. Lorsqu'une valeur est exclue pour une case, cette valeur est définie à 0.

Lorsque le formulaire est défini, le tableau est mis à jour pour faire entrer les valeurs dans les solutions des zones correspondantes et ces valeurs sont supprimées des autres cases appropriées.

De la, une boucle est entrée. La boucle est répetée pour chaque case individuelle, ligne, colonne et carré de neuf:

  • Toutes les valeurs qui sont définies sont supprimées de toutes les autres cases dans lesquelles elles pourraient apparaitre.
  • Pour chaque objet (case, ligne ou colonne), nous vérifions s'il existe une et une seule valeur disponible.
  • S'il y a une solution, nous la remplissons et supprimons cette valeur des autres cases ou elle ne peut plus être utilisée.
  • La boucle est répétée jusqu'à ce que toutes les cases soient résolues, soit un maximum de 20 itérations. Je n'ai pas rencontré un puzzle qui a pris plus de 3 itérations à résoudre.

Je n'ai pas trouvé un Sudoku que cet algorithme ne peut pas résoudre, mais je ne peux pas garantir qu'il n'existe aucune exception.

Ceci est implémenté dans une classe PHP que j'appelle, de manière appropriée, "Sudoku". La classe prend le tableau bidimensionnel des données du formulaire quand il est construit. Pour résoudre le puzzle, vous appelez la méthode publique solve().

Après avoir été résolu, l'objet a deux variables publiques - solutionArray contient le puzzle résolu et initArray contient les données du formulaire initiales, que j'utilise aux fins d'affichage.

Le code est sur ma page GitHub, bien qu'il pourrait certainement être amélioré.