[C++] Génération de grille de Sudoku
chindit
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Je viens de créer un petit code tout simple pour générer un grille du sudoku (remplie). Malheureusement, lorsque je lance mon programme, il tourne indéfiniment en utilisant 50% du processeur.
Je crois qu'il doit y avoir une boucle infinie mais je ne vois pas où.
Voici mon code:
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main()
{
int grille[8][8];
//mise à 0 de la grille
for(int vert=0; vert<9; vert++){
for(int hor = 0; hor<9; hor++){
grille[vert][hor] = 8;
}
}
//Pour la génération des nombres aléatoires
srand(time(NULL));
//Les limites pour le tirage au sort
long max = 9;
long min = 1;
bool nombre_ok = false;
//Pour la sélection du nombre de la grille
for(int i=0; i<=8; i++){
for(int j=0; j<=8; j++){
while(!nombre_ok){
nombre_ok = true;
grille[i][j] = (rand() % (max - min + 1)) + min;
for(int k=0; k<9; k++){
if(grille[k][j] == grille[i][j]){
nombre_ok = false;
}
}
}
}
}
int v=0;
for(v; v<9;v++){
for(int h=0; h<9; h++){
cout << grille[v][h];
cout << " ";
}
cout << "\n";
}
}
Merci d'avance pour votre aide.
P.S.:Y a-t-il une balise "code" sur ce forum???
Je viens de créer un petit code tout simple pour générer un grille du sudoku (remplie). Malheureusement, lorsque je lance mon programme, il tourne indéfiniment en utilisant 50% du processeur.
Je crois qu'il doit y avoir une boucle infinie mais je ne vois pas où.
Voici mon code:
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main()
{
int grille[8][8];
//mise à 0 de la grille
for(int vert=0; vert<9; vert++){
for(int hor = 0; hor<9; hor++){
grille[vert][hor] = 8;
}
}
//Pour la génération des nombres aléatoires
srand(time(NULL));
//Les limites pour le tirage au sort
long max = 9;
long min = 1;
bool nombre_ok = false;
//Pour la sélection du nombre de la grille
for(int i=0; i<=8; i++){
for(int j=0; j<=8; j++){
while(!nombre_ok){
nombre_ok = true;
grille[i][j] = (rand() % (max - min + 1)) + min;
for(int k=0; k<9; k++){
if(grille[k][j] == grille[i][j]){
nombre_ok = false;
}
}
}
}
}
int v=0;
for(v; v<9;v++){
for(int h=0; h<9; h++){
cout << grille[v][h];
cout << " ";
}
cout << "\n";
}
}
Merci d'avance pour votre aide.
P.S.:Y a-t-il une balise "code" sur ce forum???
Configuration: Windows XP Firefox 3.0
2 réponses
-
#include <iostream> #include <stdlib.h> #include <time.h> #include <stdio.h> using namespace std; void main(){ int grille[9][9]={0};//déclaration de la grille + mise à zéro //Pour la génération des nombres aléatoires srand((unsigned int)time(NULL)); //Les limites pour le tirage au sort int max = 9; int min = 1; bool nombre_ok; //Pour la sélection du nombre de la grille for(int i=0; i<9; i++){ for(int j=0; j<9; j++){ do{ nombre_ok = true; grille[i][j] = (rand() % (max - min + 1)) + min; for(int k=0; k<9; k++){ if (k!=j){ if(grille[i][k] == grille[i][j]){ nombre_ok = false; } } } }while (!nombre_ok); } } for(int v=0; v<9;v++){ for(int h=0; h<9; h++){ cout << grille[v][h]; cout << " "; } cout << "\n"; } system("pause"); }
J'ai modifié vraiment cette ligne là :if (k!=j){ if(grille[i][k] == grille[i][j]){ nombre_ok = false; } }
En effet, déjà tu avais inversé k et i dans ton tableau. Et de plus, il faut que tu fasses attention à ne pas comparer le nombre tiré au hasard avec lui même, d'où le k!=j.
Ta déclaration de tableau n'était pas bonne non plus, tu dois indiquer le nombre d'éléments : ici 9 par 9.
Voilà, tu remarqueras que ceci ne marche que pour les lignes, à toi de vérifier pour les colonnes aussi :).
Bonne chance.
ps : tu as pu remarqué une petite astuce d'initialisation de tableau ^^ -