Ajout generation grille, amélioration UI, commentaires
This commit is contained in:
57
SudokuSolver.java
Normal file
57
SudokuSolver.java
Normal file
@@ -0,0 +1,57 @@
|
||||
public class SudokuSolver {
|
||||
public boolean solve(Grid grid) {
|
||||
return solveRecursive(grid);
|
||||
}
|
||||
|
||||
private boolean solveRecursive(Grid grid) {
|
||||
for (int row = 0; row < 9; row++) {
|
||||
for (int col = 0; col < 9; col++) {
|
||||
if (grid.getCell(row, col).getValue() == 0) {
|
||||
for (int num = 1; num <= 9; num++) {
|
||||
if (isSafe(grid, row, col, num)) {
|
||||
grid.getCell(row, col).setValue(num);
|
||||
if (solveRecursive(grid)) {
|
||||
return true;
|
||||
}
|
||||
// Backtrack si la solution actuelle n'est pas valide
|
||||
grid.getCell(row, col).setValue(0);
|
||||
}
|
||||
}
|
||||
// Aucun nombre n'est valide, donc la grille est insoluble
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Toutes les cellules ont été remplies, la grille est résolue
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean isSafe(Grid grid, int row, int col, int num) {
|
||||
// Vérifier la ligne
|
||||
for (int i = 0; i < 9; i++) {
|
||||
if (grid.getCell(row, i).getValue() == num) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Vérifier la colonne
|
||||
for (int i = 0; i < 9; i++) {
|
||||
if (grid.getCell(i, col).getValue() == num) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Vérifier la région 3x3
|
||||
int startRow = row - row % 3;
|
||||
int startCol = col - col % 3;
|
||||
for (int i = 0; i < 3; i++) {
|
||||
for (int j = 0; j < 3; j++) {
|
||||
if (grid.getCell(i + startRow, j + startCol).getValue() == num) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user