diff --git a/Grilles/Grille3-fausse b/Grilles/Grille3-fausse new file mode 100644 index 0000000..98569bc --- /dev/null +++ b/Grilles/Grille3-fausse @@ -0,0 +1,9 @@ +062506090 +100029000 +059008602 +047190300 +906302104 +001087920 +604800510 +000940007 +090001480 \ No newline at end of file diff --git a/SudokuGenerator.class b/SudokuGenerator.class index d259d3e..0511a21 100644 Binary files a/SudokuGenerator.class and b/SudokuGenerator.class differ diff --git a/SudokuGenerator.java b/SudokuGenerator.java index c0811d1..6ffa151 100644 --- a/SudokuGenerator.java +++ b/SudokuGenerator.java @@ -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) { e.printStackTrace(); } } 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 + } }