Langage c generateur sudoku

poiuyt -  
 poiuyt -
Bonjour,


j'ai un problème au niveau de mon code. J'arrive à créer un sudoku soit avec des lignes valables soit avec des colonnes valables (i.e de 1 à 9) mais pas les deux à la fois.
Pouvez-vous m'aidez ?

Voici mon code:



#include <stdio.h>
#include <stdlib.h>

int main()
{
int grille[9][9]={0}


srand(time(NULL));

int max = 9;
int min = 1;
int nombre_ok=0;
int i,j,k,v,h,m;



for(i=0; i<9; i++)
{
for(j=0; j<9; j++)
{
do{
nombre_ok = 1;
grille[i][j] = (rand() % (max - min + 1)) + min;
for(k=0; k<9; k++)
{
if (k!=j)
{
if(grille[i][k] == grille[i][j])
{
nombre_ok = 0;
}

}

}

}while (!nombre_ok);


}


}


for(v=0; v<9;v++)

{
for(h=0; h<9; h++)
{
printf("%d ",grille[v][h]);
}
printf("\n");

}

return 0;
}


Merci.
A voir également:

2 réponses

matthoffman Messages postés 405 Date d'inscription   Statut Membre Dernière intervention   47
 
Tu vas dans la mauvaise direction, tu ne peux pas generer un sudoku en utilisant un tel algo, c'est bien plus complexe que ca.
D'autant plus que tu as l'air d'avoir neglige le fait qu'il fallait aussi verifier les 9 sous regions.

Il faut que pour chaque chiffre que tu veux placer, tu te construises une pool des solutions possibles (selon les regles de ne pas repeter un chiffre dans une sous region, dans une colonne, puis dans une ligne). Et ensuite tu choisis en random dans cette pool.

Ceci etant la partie facile (bien qu'elle soit deja prise de tete, normal c'est un casse tete non ? :p)

En effet, une fois que tu auras fait ca, la simplification minimale de ta grille ne sera pas du gateau, mais bon a l'aide d'un graphe je pense que ca peut se faire, mais la encore l'algo n'est pas du niveau debutant.
Car un vrai sudoku ne doit avoir qu'une unique solution.

https://fr.wikipedia.org/wiki/Sudoku#Structure_logique

Ca peut t'interesser.

En esperant t'avoir oriente vers la bonne direction :)
1
poiuyt
 
Ah oui, j'ai oublié de penser aux sous-régions. Merci de la précision :)
0