[C++] Génération de grille de Sudoku

Fermé
chindit - 29 juin 2008 à 12:30
 Utilisateur anonyme - 29 juin 2008 à 14:18
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???
A voir également:

2 réponses

Utilisateur anonyme
29 juin 2008 à 14:18
#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 ^^
6
Utilisateur anonyme
29 juin 2008 à 14:01
Salut,
attends je regarde ça.
0