Apprendre à résoudre un sudoku

Soyez le premier à donner votre avis sur cette source.

Vue 10 039 fois - Téléchargée 919 fois

Description

Ce logiciel permet de résoudre tous les sudokus en choisissant parmi les différentes techniques existantes, y compris la force brute (essai de toutes les possibilités !) qui fournit la solution de façon infaillible..
Il nécessite la libraire "lamegrid.dll" pour fonctionner (fournie).

Il peut montrer graphiquement le détail de chaque méthode utilisée.

Il permet aussi de ne faire apparaitre que certaines valeurs candidates, ce qui peut aider à visualiser les possibilités.

Inutile de pinailler sur la qualité du code... c'était mon premier programme en .net, je le fournis juste pour ceux qui veulent progresser dans l'art de résoudre les sudokus.

A noter quand même une méthode pour faire apparaitre un MessageBox ailleurs qu'au centre de l'écran...

Merci de vos suggestions d'amélioration.

Source / Exemple :


Voir le zip, tout est dans un seul fichier.

Conclusion :


J'espère qu'il conviendra à ceux qui sèchent sur une grille en se demandant (comme moi à l'époque) quelle méthode permettrait encore de progresser vers la solution.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
36
Date d'inscription
jeudi 28 janvier 2010
Statut
Membre
Dernière intervention
6 février 2011

à DX90 :
merci pour tes remarques...

c'est vrai que je n'ai pas prévu que l'on vide la grille pendant la recherche ! la logique serait de faire ESC ou stop (prévu sur les recherches longues ou sur la "totale") avant de vider la grille. on peut aussi dans le programme de vidage de la grille commencer par mettre à TRUE le flag ESC_flag qui est testé avant d'essayer une autre méthode lors de la recherche.

pour la saisie des valeurs, je n'ai pas non plus testé la cohérence. cela serait faisable au moment ou il gère le nombre saisi (par exemple effacer la valeur si elle figure déjà dans la ligne-colonne-région).
ceci dit, ça m'étonnerais qu'il continue de chercher sans s'arrêter...il produira juste des cases vides sans aucun candidat possible.
si tu trouves une grille (même incorrecte dès le départ) pour laquelle le programme tourne indéfiniment, je suis intéressé !
Messages postés
40
Date d'inscription
dimanche 24 janvier 2010
Statut
Membre
Dernière intervention
14 septembre 2018
1
C'est bon j'ai compris pour le système de résolution.
Messages postés
40
Date d'inscription
dimanche 24 janvier 2010
Statut
Membre
Dernière intervention
14 septembre 2018
1
Bonjour,

Ton code est vraiment excellent, mais il reste notamment quelque oublie.
Quand tu vide la grille et que ca cherche, ben il continue en supprimant, certaines partie, tu devrai y ajouter la fonction: ButtonViderGrille.Enabled = False
Et ButtonViderGrille.Enabled = True quand la solution est trouvé.
Et il reste le gros bug, par contre je sait pas comment le corriger, si tu met 2 nombres sur la même ligne, même colonne, ou même carré, ben il ne trouve pas le solution, il continue mais ne finit jamais.
Après d'où l'utilité de faire exprès il n'y en a pas, mais bon, c'est juste une suggestion.
Et j'ai pas trop compris les résolutions pour voir comment c'est fait mais bon pas grave.

DX90
Messages postés
12
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
21 janvier 2013

Bonjour,

Logiciel très soigné qui sort nettement des sentiers battus.

Pour une résolution rapide, en une fraction de seconde, voir le lien : http://cgi.cse.unsw.edu.au/~xche635/dlx_sodoku/.
C'est écrit en C++, mais doit pouvoir se transcrire en VB.NET.
La méthode DLX (Dancing Links), en plus d'être rapide, permet de détecter des sudokus insolubles ou possédant plusieurs solutions.

En tout cas merci pour ce code qui m'a permis de passer quelques bons moments.

Norpac.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.