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
| grille::grille(){
generer();
}
void grille::generer(){
int chiffre,ligne,colonne,region;
zero();
while(resteCaseVide()){
for(ligne=0;ligne<9;ligne++)
for(colonne=0;colonne<9;colonne++){
region=(ligne/3)*3+colonne/3;//région de 9 cases où se trouve ligne
//et colonne
chiffre=rand()%9+1;//aléatoire 1...9
if(absentLigne(ligne,chiffre)&&absentColonne(colonne,chiffre)
&&absentRegion(region,ligne))
tabIndices[ligne][colonne].setChiffre(chiffre);
}
}
}
void grille::afficher(){
for(int i(0);i<9;i++){
for(int j(0);j<9;j++)
cout<<tabIndices[i][j].getChiffre()<<" ";
cout<<endl;
}
}
bool grille::resteCaseVide(){
for(int ligne(0);ligne<9;ligne++)
for(int colonne(0);colonne<9;colonne++)
if(tabIndices[ligne][colonne].getChiffre()==0)
return true;
return false;
}
void grille::zero(){
for(int ligne(0);ligne<9;ligne++)
for(int colonne(0);colonne<9;colonne++){
tabIndices[ligne][colonne].supIndices();
tabIndices[ligne][colonne].setChiffre(0);
}
}
bool grille::absentLigne(int ligne,int chiffre){
for(int i(0);i<9;i++)
if(tabIndices[ligne][i].getChiffre()==chiffre)
return false;
return true;
}
bool grille::absentColonne(int colonne,int chiffre){
for(int i(0);i<9;i++)
if(tabIndices[i][colonne].getChiffre()==chiffre)
return false;
return true;
}
bool grille::absentRegion(int region,int chiffre){
for(int i(0);i<9;i++)
if(tabIndices[(region/3)*3+i/3][(region%3)*3+i%3].getChiffre()==chiffre) //c'est la i ème case de la région qui est testée si elle est égale à chiffre
return false;
return true;
}
int lieu::getChiffre(){
return chiffre;
}
void lieu::setChiffre(int i){
chiffre=i;
}
void lieu::supIndices(){
indices.clear();
} |