Bonjour ,
je veux bien faire un programme qui permet de generer une grille sudoku entièrement remplie en c càd à partir de zéro (solution autrement dit)
comme vous savez ,elle doit satisfaire les règles :
- tout entier de la grille doit être compris entre 1 et 9
- l'entier ne doit pas se répéter sur la ligne
- l'entier ne doit pas se répéter sur la colonne
- l'entier ne doit pas se répéter dans sa région (il y a 9 regions)
D'abord j'ai commencé à faire une fontion qui genère aliatoirement un nbre et avant de le mettre dans la grille au coordonnées (i,j) elle vérifie s'il existe dans la ligne dans la colonne et dans la région :
heuresement ça marche correctement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 int generer_nb(int m[9][9],int i,int j) { int nbre , exist_sur_ligne ,exist_sur_colonne ,exist_dans_region ; do { nbre = rand()%9 + 1; exist_sur_ligne=existe_sur_ligne(nbre,m,i,j); exist_sur_colonne=existe_sur_colonne(nbre,m,i,j); exist_dans_region=existe_dans_region(nbre,m,i,j); } while(exist_sur_ligne||exist_sur_colonne||exist_dans_region); return nbre ; }
mais ,voilà le problème :
Après , (j'ai initialisé la grille à 0) et puis quand j'ai commencé à remplir la grille comme suit:
Dans le main :
Je me trouve devant cette situation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 for (i=0;i<9;i++) { for (j=0;j<9;j++) { nbre=generer_nb(m,i,j); m[i][j]=nbre; afficher_grille(m); } }
le programme se bloque dans la derniere colonne de la deuxième ligne :
en faite c'est logique car il n'ya pas un nbre qui satisfait au conditions citées si-dessus ..
j'ai essayée remplir la grille de mille manière mais j'ai pas trouvé la solution :
* j'ai essayé de commencé par le milieu , de remplir symétriquement ....
Comment faire svp ?
Partager