import javax.swing.*; import java.io.*; public class SudokuGenerator { public static int[][] generateGrid() { // grille par défaut int[][] grid = { {0, 0, 0, 9, 0, 5, 0, 0, 4}, {5, 0, 3, 0, 0, 4, 0, 8, 7}, {0, 0, 0, 7, 0, 0, 6, 0, 3}, {9, 0, 0, 0, 3, 4, 0, 8, 0}, {0, 4, 0, 0, 1, 0, 0, 7, 0}, {0, 2, 0, 5, 7, 0, 0, 0, 6}, {4, 0, 9, 0, 0, 2, 0, 0, 0}, {6, 0, 7, 9, 0, 3, 0, 2, 1}, {2, 0, 0, 6, 5, 0, 0, 0, 0} }; return grid; } public static int[][] readGridFromFile() { int[][] grid = new int[9][9]; JFileChooser fileChooser = new JFileChooser(); int result = fileChooser.showOpenDialog(null); if (result == JFileChooser.APPROVE_OPTION) { File selectedFile = fileChooser.getSelectedFile(); try (BufferedReader reader = new BufferedReader(new FileReader(selectedFile))) { for (int i = 0; i < 9; i++) { String line = reader.readLine(); // Vérifier la longueur de la ligne lue if (line.length() != 9) { JOptionPane.showMessageDialog(null, "Invalid file format. Please select a file with correct Sudoku grid format."); return generateGrid(); // Charger la grille par défaut en cas d'erreur } for (int j = 0; j < 9; j++) { char ch = line.charAt(j); if (ch >= '1' && ch <= '9') { grid[i][j] = Character.getNumericValue(ch); } else { grid[i][j] = 0; } } } 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 } }