diff --git a/app/src/main/java/sudoku/solver/MixedSolver.java b/app/src/main/java/sudoku/solver/MixedSolver.java index 1084583..5166255 100644 --- a/app/src/main/java/sudoku/solver/MixedSolver.java +++ b/app/src/main/java/sudoku/solver/MixedSolver.java @@ -45,6 +45,9 @@ public class MixedSolver implements Solver { throw new CancellationException("User wants to stop the solver"); } + if (doku.isSolved()) + return true; + int symbolCount = doku.getSubGrid(0).getSize(); // on remplit les cases par déduction @@ -56,12 +59,12 @@ public class MixedSolver implements Solver { if (possibleSymbols.size() == 1) { cell.setSymbolIndex(possibleSymbols.getFirst()); addStep(cell, steps); + if (solve(doku, steps)) + return true; + cell.setSymbolIndex(Cell.NOSYMBOL); } } - if (doku.isSolved()) - return true; - // on ne peut plus remplir de cases, on tente de backtrack for (int maxPossibilities = 2; maxPossibilities <= symbolCount; maxPossibilities++) { List backtrackCells = new ArrayList<>(); @@ -81,15 +84,12 @@ public class MixedSolver implements Solver { // on tente de placer chacun des symboles for (int symbol : possibilities) { - var state = doku.getStateManager().pushState(); backtrackCell.setSymbolIndex(symbol); if (solve(doku, steps)) { - // doku.getStateManager().forgetState(); return true; } - doku.getStateManager().popState(); - doku.getStateManager().restoreState(state); } + backtrackCell.setSymbolIndex(Cell.NOSYMBOL); } } return doku.isSolved();