public class Resolve { public static boolean solveSudoku(int[][] grid) { int row = -1; int col = -1; boolean isEmpty = true; // Recherche d'une cellule vide dans la grille for (int i = 0; i < grid.length; i++) { for (int j = 0; j < grid[i].length; j++) { if (grid[i][j] == 0) { row = i; col = j; // Cellule vide trouvée isEmpty = false; break; } } if (!isEmpty) { break; } } // Si la grille est pleine, le sudoku est résolu if (isEmpty) { return true; } // Essayer de placer les chiffres de 1 à 9 dans la cellule vide for (int num = 1; num <= 9; num++) { if (isValidMove(grid, row, col, num)) { grid[row][col] = num; // Résoudre récursivement le sudoku if (solveSudoku(grid)) { return true; } // Annuler la valeur si la solution n'est pas possible grid[row][col] = 0; } } // Aucune solution n'est possible pour cette cellule return false; } // Vérifie si un nombre peut être placé dans une cellule spécifique private static boolean isValidMove(int[][] grid, int row, int col, int num) { // Vérifie la ligne for (int x = 0; x < 9; x++) { if (grid[row][x] == num) { return false; } } // Vérifie la colonne for (int y = 0; y < 9; y++) { if (grid[y][col] == num) { return false; } } // Vérifie la région 3x3 int regionRowStart = row - row % 3; int regionColStart = col - col % 3; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (grid[i + regionRowStart][j + regionColStart] == num) { return false; } } } // La valeur peut être placée dans cette cellule return true; } }