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 :
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 ;
}
heuresement ça marche correctement
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 :
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);
    }
}
Je me trouve devant cette situation :


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 ?