lapras a écrit:quelqun saurait comment éviter l'erreur : excess elements
pour cette ligne :
char grilleDepart={8,4,7,0,9,0,2,0,0,3,0,0,0,0,2,0,0,7,9,0,0,7,0,0,6,0,0,0,0,3,0,0,0,8,2,6,2,0,0,0,6,1,5,4,9,0,5,0,0,8,9,0,0,1,4,0,6,9,2,0,0,8,5,0,0,0,1,7,0,9,0,0,0,8,0,5,4,6,1,0,2};
??
#include
int main ()
{
char grilleDepart[81]={8,4,7,0,9,0,2,0,0,3,0,0,0,0,2,0,0,7, 9,0,0,7,0,0,6,0,0,0,0,3,0,0,0,8,2,6,2,0,0,0,6,1,5, 4,9,0,5,0,0,8,9,0,0,1,4,0,6,9,2,0,0,8,5,0,0,0,1,7, 0,9,0,0,0,8,0,5,4,6,1,0,2};
std::cout<<char(grilleDepart[4]+48)<<"\n";
return 0;
}
gol_di_grosso a écrit:On a justement fais un sudoku en c au premier semestre de L1. Et on c'etait demandé comment on pourrait généré des grille, y en pas qui saurait ?
lapras a écrit:Flo, puis je avoir un ordre de grandeur du temps que ton programme a mis pour trouver la solution ?
#include
#include
#include
//mettre un 'A' pour les cases vide dans Grille depart et un '0' dans les case vide dans Sudoku.
char grilleDepart[81]={'A',3,'A',2,'A','A','A','A','A','A','A','A',4,5,8,'A','A','A',4,'A','A','A',6,3,7,'A',5,'A',9,'A','A','A','A',3,8,'A',1,'A','A','A',2,'A','A','A',6,'A',5,7,'A','A','A','A',4,'A',6,'A',4,9,3,'A','A','A',7,'A','A','A',6,8,5,'A','A','A','A','A','A','A','A',2,'A',9,'A'};
char sudoku[81]={0,3,0,2,0,0,0,0,0,0,0,0,4,5,8,0,0,0,4,0,0,0,6,3,7,0,5,0,9,0,0,0,0,3,8,0,1,0,0,0,2,0,0,0,6,0,5,7,0,0,0,0,4,0,6,0,4,9,3,0,0,0,7,0,0,0,6,8,5,0,0,0,0,0,0,0,0,2,0,9,0};
char i[81]= {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //Chiffre a la profondeur [profondeur]
char j[81]= {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,11,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; //Indique si on doit avancer dans la récursivité ou reculer
void ajouterCase(int profondeur); //programme principal récursif
int isValid(char *sudoku); //verifie la validité du sudoku et affiche la grille
int in_array(int numeroCase); //Verfie si une case n'est pas déja définie dans la grille
void reculer(int profondeur); // modifie j
void avancer(int profondeur);
int main(int argc, char *argv[])
{
ajouterCase(0);
system("PAUSE");
return 0;
}
void ajouterCase(int profondeur)
{
if(profondeur==80 && isValid(sudoku)) // si on est a la derniere case, et que la grille est valide, c'est fini !
{
printf("FINI , solution : \n");
isValid(sudoku);
system("PAUSE");
exit(0);
}
if(in_array(profondeur)) //si la case est prédéfinie par l'énoncé
{
if(j[profondeur]==1) //si on est autorisé a avancer dans la récursivité
{
ajouterCase(profondeur+1); //on appelle la fonction a la profondeur + 1
}
else
{
ajouterCase(profondeur-1); //sinon on recule dans la récursivité
}
}
else //sinon on est devant une case vide (une case = 0)
{
while(i[profondeur]<=8) //tant que le chiffre de la case n° profondeur est <= 9
{
i[profondeur]++;
sudoku[profondeur]=i[profondeur];
if(isValid(sudoku))
{
avancer(profondeur); //On active les j pour pouvoir avancer dans la récursivité
ajouterCase(profondeur+1);
}
}
reculer(profondeur);//On desactive les j pour pouvoir reculer dans les cases du sudoku (c'est a dire les j[0] à j[profondeur-1] sont mis a 0)
i[profondeur]=0; //On remet a 0 la case puisqu'aucun numéro ne marche
sudoku[profondeur]=0; //On efface la case
ajouterCase(profondeur-1); //on remonte à la profondeur - 1
}
}
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité
Tu pars déja ?
Identification
Pas encore inscrit ?
Ou identifiez-vous :