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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
 
using namespace std;
 
int main(){
int grille[9][9];//déclaration de la grille + mise à zéro
 
for(int t=0;t<9;t++){
    for(int w=0;w<9;w++){
        grille[t][w] = 0;
    }
}
 
//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++){
	    //Début de vérification du nombre pour la ligne
		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;
					}
				}
			}
 
			//Début de vérification de nombre pour la colonne
 
			if(nombre_ok){//Si nombre_ok vaut true, on va sortir de la boucle parce que tout est juste
			    //Boucle pour lister les différentes propriétés
			    for(int k=0; k<9; k++){
			        if(k!=i){
			            if(grille[k][j] == grille[i][j]){
			                nombre_ok = false;
			            }
			        }
			    }
			}
 
			//Fin de vérification de nombre pour la colonne
		}while (!nombre_ok);
		//Fin de vérification de nombre pour la ligne!
 
	}
}
 
for(int v=0; v<9;v++){
	for(int h=0; h<9; h++){
		cout << grille[v][h];
		cout << " ";
	}
	cout << "\n";
}
 
}
En fait le problème se situe aux lignes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
if(nombre_ok){//Si nombre_ok vaut true, on va sortir de la boucle parce que tout est juste
			    //Boucle pour lister les différentes propriétés
			    for(int k=0; k<9; k++){
			        if(k!=i){
			            if(grille[k][j] == grille[i][j]){
			                nombre_ok = false;
			            }
			        }
			    }
			}
 
			//Fin de vérification de nombre pour la colonne
Si on les mets en commentaires, le programme fonctionne et toutes les lignes du sudoku sont correctements remplies, mais pas les collones.

J'ai relu plusieurs fois cette partie de code mais je ne vois pas pourquoi il fait bugger le programme.

Merci d'avance pour votre aide.