Langage c generateur sudoku

Fermé
poiuyt - Modifié par poiuyt le 21/12/2011 à 00:57
 poiuyt - 21 déc. 2011 à 12:36
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 lundi 24 mars 2008 Statut Membre Dernière intervention 22 janvier 2013 47
21 déc. 2011 à 10:06
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
Ah oui, j'ai oublié de penser aux sous-régions. Merci de la précision :)
0