• imprimer
  • aide

Forum de discussions « Modélisation - Algorithmique »

Retrouvez les publications relatives à ces discussions dans notre rubrique algorithmique et méthodes.

Résolution du Sudoku

liste des forums liste des discussions Participer à la discussion

Photo de Pirz Message publié le mercredi 02 juillet 2008 - 11h35 par Pirz.
Bonjour,

J'essaye de faire un algorithme de résolution de Sudoku avec le backtracking mais il ne marche pas sur toutes les grilles. (Dans certains cas j'ai un dépassement de mémoire qui correspond, je pense, à une boucle infinie.) Voici mon algo :

Je cherche tout d'abord les coordonnées de tous les zéros* présents dans la grille, et je les place (les coordonnées) dans un tableau de coordonnées.

Soit un fonction back(i, val, tab) qui renvoie un Sudoku, avec
i : l'indice du zéro dont on doit trouver la valeur
val : la valeur que l'on souhaite tester pour cette case
tab : le tableau contenant les coordonnées de tous les zéros

Si la grille est complète et est valide -> je retourne le Sudoku tel quel.

Si val > 9 : je récupère la valeur actuellement testée au zéro situé à l'indice i - 1 (appellons cette valeur newVal), j'efface (= je mets à 0) la valeur du zéro actuel (à l'indice i, donc) et je retourne back(i - 1, newVal, tab).

Sinon :
Je mets la valeur val dans la case du zéro actuel, et je regarde si le Sudoku est valide avec cette nouvelle valeur.
Si oui : je retourne back(i + 1, 1, tab)
Sinon : je retourne back(i, val + 1, tab)

Voilà. Quelqu'un voit-il à quel niveau se situe le bug ?

Merci d'avance.

* je considère ici un zéro comme une case à chercher

liste des forums liste des discussions Participer à la discussion

Vous devez obligatoirement vous identifier en tant que membre pour participer à cette discussion.

ACCÉS COMMUNAUTÉ

Rejoignez ALL HTML

Publiez vos articles, actualités, communiqués ... Donnez votre avis, partagez votre réseau, rencontrez d'autres membres et participez à la vie de la communauté.

Les 5 dernières discussions