[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???
A voir également:
- [C++] Génération de grille de Sudoku
- Generateur de mot de passe - Télécharger - Sécurité
- Generation ryzen - Guide
- Grille tombola vierge à imprimer 50 cases - Télécharger - Création musicale
- Réinitialiser chromecast 1ere génération - Guide
- Grille tarifaire sosh - Accueil - Guide opérateurs et forfaits
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 ^^