This commit is contained in:
Adrien DICK 2024-04-03 12:03:40 +02:00
parent 8bee2d784a
commit 2b006f67f4
3 changed files with 72 additions and 0 deletions

9
Grilles/Grille3-fausse Normal file
View File

@ -0,0 +1,9 @@
062506090
100029000
059008602
047190300
906302104
001087920
604800510
000940007
090001480

Binary file not shown.

View File

@ -42,10 +42,73 @@ public class SudokuGenerator {
} }
} }
} }
if (!isGridValid(grid)) {
JOptionPane.showMessageDialog(null, "Invalid Sudoku grid. Loading default grid.");
return generateGrid(); // Charger la grille par défaut en cas de grille invalide
}
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
return grid; return grid;
} }
// Méthode pour vérifier si la grille est valide
private static boolean isGridValid(int[][] grid) {
for (int i = 0; i < 9; i++) {
if (!isRowValid(grid, i) || !isColumnValid(grid, i) || !isRegionValid(grid, i)) {
return false;
}
}
return true;
}
// Méthode pour vérifier s'il n'y a pas de chiffres en double sur une ligne donnée
private static boolean isRowValid(int[][] grid, int row) {
boolean[] seen = new boolean[10]; // Tableau pour suivre les chiffres déjà rencontrés
for (int i = 0; i < 9; i++) {
int num = grid[row][i];
if (num != 0) {
if (seen[num]) {
return false; // Le chiffre est déjà apparu sur cette ligne
}
seen[num] = true;
}
}
return true; // Aucun chiffre en double sur la ligne
}
// Méthode pour vérifier s'il n'y a pas de chiffres en double sur une colonne donnée
private static boolean isColumnValid(int[][] grid, int col) {
boolean[] seen = new boolean[10]; // Tableau pour suivre les chiffres déjà rencontrés
for (int i = 0; i < 9; i++) {
int num = grid[i][col];
if (num != 0) {
if (seen[num]) {
return false; // Le chiffre est déjà apparu sur cette colonne
}
seen[num] = true;
}
}
return true; // Aucun chiffre en double sur la colonne
}
// Méthode pour vérifier s'il n'y a pas de chiffres en double dans une région donnée
private static boolean isRegionValid(int[][] grid, int region) {
int rowOffset = (region / 3) * 3;
int colOffset = (region % 3) * 3;
boolean[] seen = new boolean[10]; // Tableau pour suivre les chiffres déjà rencontrés
for (int i = rowOffset; i < rowOffset + 3; i++) {
for (int j = colOffset; j < colOffset + 3; j++) {
int num = grid[i][j];
if (num != 0) {
if (seen[num]) {
return false; // Le chiffre est déjà apparu dans cette région
}
seen[num] = true;
}
}
}
return true; // Aucun chiffre en double dans la région
}
} }