diff --git a/app/src/main/java/sudoku/solver/HumanSolver.java b/app/src/main/java/sudoku/solver/HumanSolver.java index df0e546..01d2481 100644 --- a/app/src/main/java/sudoku/solver/HumanSolver.java +++ b/app/src/main/java/sudoku/solver/HumanSolver.java @@ -16,32 +16,25 @@ public class HumanSolver implements Solver { */ @Override public boolean solve(MultiDoku doku, List steps) { - if (Thread.interrupted()) - throw new CancellationException("User wants to stop the solver"); - - if (doku.isSolved()) { - return true; - } - - List cellsToFill = doku.getEmptyCells(); - if (cellsToFill.isEmpty()) { - return false; - } - - for (Cell cellToFill : cellsToFill) { - - List possibleSymbols = cellToFill.getPossibleSymbols(); - if (possibleSymbols.size() != 1) { - continue; + while (!doku.isSolved()) { + boolean filledCell = false; + for (Cell cell : doku.getCells()) { + if (!cell.isMutable() || !cell.isEmpty()) + continue; + + List possibleSymbols = cell.getPossibleSymbols(); + if (possibleSymbols.size() == 1) { + cell.setSymbolIndex(possibleSymbols.getFirst()); + addStep(cell, steps); + filledCell = true; + } } - - cellToFill.setSymbolIndex(possibleSymbols.getFirst()); - addStep(cellToFill, steps); - - return this.solve(doku, steps); + // on ne peut plus remplir de cases, on abandonne + if (!filledCell) + return false; } - return doku.isSolved(); + return true; } }