feat: add states
Some checks failed
Linux arm64 / Build (push) Has been cancelled

This commit is contained in:
2025-01-30 09:34:00 +01:00
committed by Melvyn
parent c4becf2d55
commit 67da77af2e
3 changed files with 60 additions and 18 deletions

View File

@@ -68,10 +68,9 @@ public class Solver {
* @param oldDoku MultiDoku, MultiDoku dont on veut le nombre de solutions.
* @return int, nombre de solutions possibles.
*/
public static int countSolution(MultiDoku oldDoku) {
public static int countSolution(MultiDoku doku) {
int result = 0;
MultiDoku doku = oldDoku.clone();
if (doku.isSolved()) {
return 1;
@@ -83,11 +82,12 @@ public class Solver {
List<Integer> possibleSymbols = cellToFill.getPossibleSymbols();
for (int symbol : possibleSymbols) {
doku.getStateManager().pushState();
cellToFill.setSymbolIndex(symbol);
if (Solver.solve(doku) != null) {
if (Solver.solve(doku)) {
result++;
}
cellToFill.setSymbolIndex(Cell.NOSYMBOL);
doku.getStateManager().popState();
}
return result;
@@ -98,37 +98,35 @@ public class Solver {
* @param doku MultiDoku, MultiDoku à résoudre.
* @return boolean, valant true si le MultiDoku est résolu, false sinon.
*/
public static MultiDoku solve(MultiDoku oldDoku) {
public static boolean solve(MultiDoku doku) {
if (Thread.interrupted())
throw new CancellationException("User wants to stop the solver");
MultiDoku doku = oldDoku.clone();
if (doku.isSolved()) {
return doku;
return true;
}
Cell cellToFill = doku.getFirstEmptyCell();
if (cellToFill == null) {
return null;
return false;
}
List<Integer> possibleSymbols = cellToFill.getPossibleSymbols();
if (possibleSymbols.isEmpty()) {
return null;
return false;
}
for (int symbol : possibleSymbols) {
cellToFill.setSymbolIndex(symbol);
if (Solver.solve(doku) != null) {
return doku;
if (Solver.solve(doku)) {
return true;
} else {
cellToFill.setSymbolIndex(Cell.NOSYMBOL);
}
}
return null;
return false;
}
/**