Résoudre grille de Sudoku
Bonjour,
Voilà, j'ai écris un petit programme (pas encore finis) qui résoud une grille de Sudoku incomplète rentrée par l'utilisateur.
Mais j'ai 2-3 problèmes :mrgreen:
En effet j'ai une fonction GenerateGrille qui remplit les cases vides en vérifiant si le nombre ne se trouve pas dans la ligne et la colonne mais je ne sais pas comment faire pour vérifier si il est dans le carré ?? Car sans ça la grille affichée contient toujours des cases vides.
Code:
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
| /*****************************************************/
/* FONCTION : RESOUD LA GRILLE */
/*****************************************************/
void GenerateGrille(int grille[][taille])
{
int ligne, colonne, nb;
for(ligne = 0; ligne < taille; ligne++) // Parcourt les lignes du tableau
{
for(colonne = 0; colonne < taille; colonne++) // Parcourt les colonnes du tableau
{
if (grille[ligne][colonne] == 0) // Si la case est vide...
{
for (nb = 1; nb <= taille; nb++) // On remplit la grille avec un nombre de 1 à 9
{
if(Colonne(grille, nb, ligne, colonne) != false && Ligne(grille, nb, ligne, colonne) != false) // Vérifie que le nombre n'est pas déjà dans la ligne ou la colonne
{
grille[ligne][colonne] = nb; // La case reçoit le nombre
nb = taille + 1; // Pour sortir de la boucle
}
}
}
}
}
}
bool Ligne(int grille[][taille], int nb, int ligne, int colonne)
{
int j;
bool trouve;
trouve = true;
for(j=0; j<taille; j++)
{
if(nb == grille[ligne][j])
{
if(j != colonne)
{
trouve = false;
j = taille;
}
}
}
return(trouve);
}
bool Colonne(int grille[][taille], int nb, int ligne, int colonne)
{
int i;
bool trouve;
trouve = true;
for(i=0; i<taille; i++)
{
if(nb == grille[i][colonne])
{
if(i != ligne)
{
trouve = false;
i = taille;
}
}
}
return(trouve);
} |
Si vous pouviez m'éclairer
Merci
Bonne journée