cs_Urgo
Messages postés780Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention16 avril 20091 31 déc. 2005 à 00:18
Y'a pas de solution compliquées, pour une VRAIE grille de sudoku donnée (généralement 81 cases), il n'y qu'UNE SEULE solution possible.
Donc je vois pas où est le bogue.... de quels programmes parles-tu ?
cs_imad_lol
Messages postés90Date d'inscriptionsamedi 18 novembre 2000StatutMembreDernière intervention23 mai 2008 31 déc. 2005 à 00:54
je veu dire que les codes que je trouve dans le site j arrive pas a les comprendre..peut etre que cé de ma faute mais pour mon niveau peut etre que cé un peu avancé..bon voila ma fonction recursive mais elle est encore au debut..et je demande si quelqu'un peu m'aider a trouver un code plus simple parceque je doi rendre ce projet ce mardi
int parcours(int i, int j,int init)
{ int k,sortir,a,pl,pc,w,x;
cs_Klephte
Messages postés22Date d'inscriptionmardi 20 mai 2003StatutMembreDernière intervention 4 janvier 2022 31 déc. 2005 à 16:42
Ce nest pas évident de réfléchir à l'algorithme que tu veux
mettre en place en partant de la réponse, mais le problème étant connu je me
lance dans une ébauche de réponse.
Voici ce que j'ai compris de ton algo :
tu parcours le tableau à la recherche de zéro, lorsque tu en trouves en un, tu
testes successivement tous les chiffres entre 1 et 9 en vérifiant à chaque
tentative sil n'est pas présent dans la ligne, la colonne ou la région sur
laquelle tu travailles, si c'est bon ou mauvais (d'ou l'erreur) tu passes à la
colonne ou la ligne suivante.
la correction que je te propose:
Modifier ton code pour que si sortir==1 alors retourner à l'appelant que le
chiffre proposé n'est pas le bon pour quil fasse une tentative avec le chiffre
suivant.
La valeur de init passée en paramètre na pas dintérêt
(pour preuve cette valeur est de faite une constante) car ce nest pas lappelant
qui décide de la valeur à mettre dans la case, mais lappelé !
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
Tu devrais aussi donner des noms de variables moins sibyllins,
k pourrait sappeler iChiffreTeste (iTestedValue), a : iTemp, sortir :bSortir
Malgré cela ton algorithme ne fonctionnera pas, car tu ne
traites pas un retour d'une mauvaise proposition (qui devrait entrainer un
autre choix) ou un acquittement du choix (cas qui se présentera lorsque tout le
tableau sera remplit).
Ton algorithme devrait être amélioré par un choix judicieux
de la case à tester, je te conseille décrire une fonction trouvant la cellule
ayant le plus de contraintes c'est-à-dire la plus de chiffres sur sa ligne, sa
colonne ou sa région, car la contrainte maximale correspond à une ligne ou
colonne ou une région nayant quune case libre et donc quune seule valeur
possible, le but étant de limiter au maximum la taille de larbre que ton
algorithme récursif parcourra et de provoquer dès le démarrage une convergence
vers le résultat.
Je crois que cette discution risque de nous tenir en haleine jusque Mardi
Arnaud Grandville
-------------------------------
Maintenant, grâce à Microsoft et à la simplification de ses systèmes via les assistants, tout le monde est capable de créer des systèmes dangereux.
cs_imad_lol
Messages postés90Date d'inscriptionsamedi 18 novembre 2000StatutMembreDernière intervention23 mai 2008 31 déc. 2005 à 22:56
merci. je suis d accord avec toi pour les noms des variables.mais pour ma fonction je pense que je suis deja sur le bon chemin..ce soir chui entrain de l'ameliorer et je te repondrai avant mardi pour dire ou ca a terminer..et peut etre je vais poser la solution de mon prof ..
a tt