[sudoku] Résolution d'une grille 9*9 en java
Fermé
80chris
Messages postés
18
Date d'inscription
samedi 1 mai 2010
Statut
Membre
Dernière intervention
17 novembre 2012
-
1 mai 2010 à 17:05
80chris Messages postés 18 Date d'inscription samedi 1 mai 2010 Statut Membre Dernière intervention 17 novembre 2012 - 2 mai 2010 à 03:14
80chris Messages postés 18 Date d'inscription samedi 1 mai 2010 Statut Membre Dernière intervention 17 novembre 2012 - 2 mai 2010 à 03:14
A voir également:
- [sudoku] Résolution d'une grille 9*9 en java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Filmora 9 - Télécharger - Montage & Édition
- Internet explorer 9 - Télécharger - Navigateurs
2 réponses
Urielxx
Messages postés
190
Date d'inscription
mardi 26 août 2008
Statut
Membre
Dernière intervention
25 juin 2013
46
1 mai 2010 à 19:18
1 mai 2010 à 19:18
Je ne comprends pas ton algo, pour moi il n'est pas correct... On dirait que tu prends le problème dans le mauvais sens : il ne faut pas tester systématiquement toutes les possibilités, mais plutôt travailler par élimination, à moins qu'il ne s'agisse de sudoku particulièrement complexes (avec des branches à exploiter).
J'aurais fait comme ça :
A chaque case, tu fais correspondre un objet avec toutes les valeurs possibles (1 à 9).
Quand tu charges ta grille, tu figes les valeurs connues, et tu laisses les autres.
Ensuite, tu parcours ta grille, et à chaque case tu enlèves des valeurs possibles toutes les valeurs déjà trouvées :
- sur la ligne
- sur la colonne
- dans la grille 3x3
et tu passes à la case suivante. Une fois la grille parcourue, tu recommences.
Si tu fais une passe complète sans rien modifier, sois :
- tu es bloqué => pas de solution déterministe
- tu as fini ta grille
Je crois que j'ai déjà répondu à un post sur le sujet...
J'aurais fait comme ça :
A chaque case, tu fais correspondre un objet avec toutes les valeurs possibles (1 à 9).
Quand tu charges ta grille, tu figes les valeurs connues, et tu laisses les autres.
Ensuite, tu parcours ta grille, et à chaque case tu enlèves des valeurs possibles toutes les valeurs déjà trouvées :
- sur la ligne
- sur la colonne
- dans la grille 3x3
et tu passes à la case suivante. Une fois la grille parcourue, tu recommences.
Si tu fais une passe complète sans rien modifier, sois :
- tu es bloqué => pas de solution déterministe
- tu as fini ta grille
Je crois que j'ai déjà répondu à un post sur le sujet...
80chris
Messages postés
18
Date d'inscription
samedi 1 mai 2010
Statut
Membre
Dernière intervention
17 novembre 2012
2 mai 2010 à 00:16
2 mai 2010 à 00:16
Je ne sais pas si , avec mon niveau actuel je pourrais faire ceci . Mais merci de ton aide . mon algo devrait faire ceci :
si la case est différente de zéro ( il y a déjà un chiffre ) , alors on passe a la case suivante .
Sinon on teste pour un n si il est situé soit dans la ligne colonne ou carré , si c'est le cas on augmente n de 1 , si il n'y a pas de chiffre dans les 3 alors on met ce n dans la case et on passe a la case suivante .
Si un moment le n arrive a 9 ( il a fait toutes les possibilités , alors on revient a la case d'avant et on essaye avec n+1 ) . et on fait ceci tant que l'on est pas arrivé a la dernière case ( i=9 et j=9 ) .
On traite aussi toutes les exceptions ( si on est a la fin d'une ligne ou au début par exemple ) .
Voila , mais sinon t'auras pas une idée d'ou pourrait venir ce n qui prend 10 , 11 voir 12 alors qu'il devrait ne pas dépasser 9 ?
si la case est différente de zéro ( il y a déjà un chiffre ) , alors on passe a la case suivante .
Sinon on teste pour un n si il est situé soit dans la ligne colonne ou carré , si c'est le cas on augmente n de 1 , si il n'y a pas de chiffre dans les 3 alors on met ce n dans la case et on passe a la case suivante .
Si un moment le n arrive a 9 ( il a fait toutes les possibilités , alors on revient a la case d'avant et on essaye avec n+1 ) . et on fait ceci tant que l'on est pas arrivé a la dernière case ( i=9 et j=9 ) .
On traite aussi toutes les exceptions ( si on est a la fin d'une ligne ou au début par exemple ) .
Voila , mais sinon t'auras pas une idée d'ou pourrait venir ce n qui prend 10 , 11 voir 12 alors qu'il devrait ne pas dépasser 9 ?
Urielxx
Messages postés
190
Date d'inscription
mardi 26 août 2008
Statut
Membre
Dernière intervention
25 juin 2013
46
2 mai 2010 à 02:10
2 mai 2010 à 02:10
pour moi, le pb vient que ton algo ne fonctionne pas... Imagine que ta grille 3x3 de départ soit :
X 8 7
6 5 4
3 2 1
Ton algo fait quoi ?
X 8 7
6 5 4
3 2 1
Ton algo fait quoi ?
80chris
Messages postés
18
Date d'inscription
samedi 1 mai 2010
Statut
Membre
Dernière intervention
17 novembre 2012
2 mai 2010 à 03:14
2 mai 2010 à 03:14
Normalement : il se rend compte que la première case est vide , donc il va tester les fonctions , il va se rendre compte que aucune valeur n'est possible sauf 9 , et il va attacher 9 a la case . Mais je ce que je pense avoir programmer et ce que l'ordinateur comprend il y a une différence c'est sur . Toutefois il remplis quand même toutes les cases en respectant les contraintes . Même si mon algo est surement très mauvais , si il résous le Sudoku je serais déjà content