コード例 #1
0
  private SudokuGrid iteratePartialSolution(int row, int column, SudokuGrid sudokuGrid) {
    if (row >= 9) {
      return sudokuGrid;
    }
    iterationCounter++;

    int newColumn = (column + 1) % 9;
    int newRow = row + (newColumn == 0 ? 1 : 0);
    if (sudokuGrid.getFieldValue(row, column) == 0) {
      for (byte value = 1; value <= 9; value++) {
        // printDebugInfo(row, column, value);
        SudokuGrid newSudokuGrid = sudokuGrid.setFieldValue(row, column, value);
        if (validateSudokuForField(row, column, newSudokuGrid)) {
          SudokuGrid resultSudokuGrid = iteratePartialSolution(newRow, newColumn, newSudokuGrid);
          if (resultSudokuGrid != null) {
            return resultSudokuGrid;
          }
        }
        sudokuGrid.resetFieldValue(row, column);
      }

    } else {
      return iteratePartialSolution(newRow, newColumn, sudokuGrid);
    }
    return null;
  }