bonjour,
sachant que ces trois fonctions fonctionnent correctement (j'ai utilisé un front end de gdb (ddd)):
le but de ces trois fonction est de donner true quand un chiffre est absent dans la ligne, la colonne et la région.
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 bool grille::absentLigne(int ligne,int indice){ int i; for(i=0;i<9;i++) if(getChiffreGrille(ligne,i)==indice) return false; return true; } bool grille::absentColonne(int colonne,int indice){ int i; for(i=0;i<9;i++) if(getChiffreGrille(colonne,i)==indice) return false; return true; } bool grille::absentRegion(int region,int indice){ int i; for(i=0;i<9;i++) if(getChiffreGrille((region/3)*3+i/3,(region%3)*3+i%3==indice)) return false; return true; }
je ne comprends pas très bien pourquoi la conditionnelle suivante exécute le else quand ces trois fonction donnent true:les régions regroupent 9 par 9 (3x3) les cases du tableau. Le numéro de région est (ligne/3)*3+colonne/3:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 void grille::indicer(){ int ligne,colonne,indice; for(ligne=0;ligne<9;ligne++) for(colonne=0;colonne<9;colonne++) for(indice=1;indice<=9;indice++) if(absentLigne(ligne,indice) && absentColonne(colonne,indice)&& absentRegion((ligne/3)*3+colonne/3,indice)) setPossiblesGrille(true,ligne,colonne,indice); else setPossiblesGrille(false,ligne,colonne,indice); }
voici la grille en question:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 000111222 000111222 000111222 333444555 333444555 333444555 666777888 666777888 666777888
quelqu'un a une idée?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 0 0 2 9 5 0 6 3 0 6 0 0 0 0 2 0 0 0 5 9 0 4 6 0 0 0 7 0 2 0 0 0 4 7 0 6 0 4 0 0 0 0 0 8 0 7 0 6 1 0 0 0 4 0 2 0 0 0 4 9 0 1 8 0 0 0 5 0 0 0 0 9 0 1 5 0 8 6 3 0 0
Partager