Bonsoir,
je suis entrain de faire un prog de c++ pour résoudre un sudoku.je le fais pour m'entrainer...
Voila j'ai un problème, il résoud que la premiere ligne sur les 9, ils continuent pas, je comprend pas....
voici le code:
Je vous explique comment le programme fonctionne...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87 #include <iostream> #include <queue> #include <stack> using std::stack; using std::queue; struct position { int lig; int col; }; queue <int> candidat(position & pos,const int grille [9][9]); struct essai { int lig; int col; queue<int>fl; }; void solution(position & pos,int grille[9][9]) { essai fi; stack<essai>es; queue<int>f; int i=0; int j=0; while(i<9) { while(j<9) { if(grille[i][j]==0) { pos.lig=i; pos.col=j; f=candidat(pos,grille); // std::cout<<f.front()<<std::endl; if(f.empty()) { es.pop(); i=(es.top()).lig; j=(es.top()).col; f=((es.top()).fl); grille[i][j]=f.front(); f.pop(); fi.lig=i; fi.lig=j; fi.fl=f; } else { grille[i][j]=f.front(); f.pop(); fi.lig=i; fi.col=j; fi.fl=f; es.push(fi); } } j++; } i++; } }
En faite il y a 3 fonctions booléenes, estDansLigne,estDansColonne,estDansRegion qui recherche si la valeur est dans la ligne, la colonne, la région, si oui, la fonction renvoi vrai...
Ces 3 fonctions sont utilisés dans la fonction candidat qui renvoi la file des candidats possibles, les chiffres possibles...
Puis ce candidat est utilisé dans la procédure sol.
On parcoure le tableau de 9*9, si la case est égale à 0, on cherche le nombre de candidats, on insere la premiere valeur à la place du 0, on supprime la valeur de tete de la file, et on met la position( ligne, colonne) et la file dans une structure, et on met cette structure sur une pile de structure.
Si il n'y a pas de candidat pour une case, on dépile la pile, et on ressaye le prochain candidat de la file, si y en a tj pas, on dépile tj....
Voila un peu l'explication...
merci de m'aider...
Alain
Partager