SUDOKU EN LANGAGE C

Messages postés
145
Date d'inscription
samedi 1 août 2009
Statut
Membre
Dernière intervention
23 juillet 2019
- - Dernière réponse : cs_casseur
Messages postés
5
Date d'inscription
mercredi 5 mai 2004
Statut
Membre
Dernière intervention
3 mai 2005
- 3 juil. 2013 à 10:55
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/55214-sudoku-en-langage-c

Afficher la suite 
ccgousset
Messages postés
145
Date d'inscription
samedi 1 août 2009
Statut
Membre
Dernière intervention
23 juillet 2019
-
Sudoku quand tu nous tiens . Question ou a tu trouvé ca =>
void Color(int texteColor)
{
HANDLE H=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(H,texteColor);
}
as tu de la doc sur cette facon de proceder ?
cs_casseur
Messages postés
5
Date d'inscription
mercredi 5 mai 2004
Statut
Membre
Dernière intervention
3 mai 2005
-
Deux commentaires sur le fond :

- Concernant la génération de la grille (sans les cases vides) : la seule source de hasard se trouve dans la génération de la première ligne. Ensuite, tout est déterministe. C'est un peu léger. Une manière simple d'ajouter une bonne dose d'aléa est de réaliser un grand nombre de permutation aléatoires de lignes et de colonnes bien choisies (les permutations concernent les lignes 1 à 3 ensemble, 4 à 6 ensemble, et 7 à 9 ensemble... idem pour les colonnes). On se rend aisément compte qu'une grille valide le reste après une permutation de ce type et donc après un nombre quelconque de permutations.

- Concernant la génération de la grille finale (l'effacement de certaines valeurs au moyen de EffacerQlqValeurCarreau), cela me parait encore plus léger. Vous vous contentez d'effacer de manière aléatoire un certain nombre de valeurs dans chaque carreau (3 en moyenne). Cela ne peut pas suffire. Il faut vérifier après l'effacement que la grille possède toujours une unique solution. En effet, si l'on efface trop de valeurs, il se peut que le problème devienne sous-déterminé et possède alors plusieurs solutions (ce qui n'a aucun intérêt du point de vue du jeu).

- En conclusion, construire des grilles de Sudoku requiert de générer des grilles qui possèdent UNE et UNE SEULE solution.
L'existence de la solution est assurée par la première partie du code (Generate via SetValue) : il y a ici moyen d'améliorer les choses en introduisant plus de hasard.
L'unicité de la solution doit être conservée lors de la procédure d'effacement des valeurs. Il y a ici une grosse lacune dans votre code. Idéalement la procédure d'effacement vérifie au fur et à mesure que la solution reste unique. Par ailleurs, il est intéressant de permettre à l'utilisateur de fixer le niveau de difficulté qui sera géré par la procédure d'effacement en ajustant le nombre de valeurs effacées.

- Voilà pour les commentaires techniques. Cela étant, c'est un problème très intéressant. Je m'y étais attelé il y a de cela quelques années et avais pondu un petit exécutable que vous trouverez à l'adresse suivante :
http://www.broufart.com/_FR_/Soft_Sudoku.html
Je peux vous fournir les sources mais elles sont bien moins propres que les vôtres et de mon avis absolument illisibles.

Bonne continuation...
cs_casseur
Messages postés
5
Date d'inscription
mercredi 5 mai 2004
Statut
Membre
Dernière intervention
3 mai 2005
-
Merci pour ces commentaires,

je tiens a vous informer que j ai fait ce code sur demande de plusieurs personnes (débutant),
j ai pas beaucoup investie sur la logique (j ai fait ce code en deux heures).
j ai voulais juste donner une aider simple pour faire le jeux Sudoku.