public void Init(SudokuBoard sudokuBoard) { int row, column, square, number, n; _candidates = Utility.ReturnThreeDimensionalDataStructure(9, 9, 10); _candidatesAfterAddedNumbersWithCertainty = null; _random = new Random((int)(DateTime.Now.Ticks % 64765L)); _numberOfCandidates = 0; for (row = 1; row <= 9; row++) { for (column = 1; column <= 9; column++) { square = 1 + (3 * ((row - 1) / 3)) + ((column - 1) / 3); if (sudokuBoard.IsSet(row, column)) { _candidates[row - 1][column - 1][0] = -1; //Indicates that the cell is set already } else { n = 0; this._candidates[row - 1][column - 1][0] = 0; //Number of candidates is set in index 0 for (number = 1; number <= 9; number++) { if ( (sudokuBoard.ReturnNumberOfOccurenciesOfNumber(number, row, Target.Row) == 0) && (sudokuBoard.ReturnNumberOfOccurenciesOfNumber(number, column, Target.Column) == 0) && (sudokuBoard.ReturnNumberOfOccurenciesOfNumber(number, square, Target.Square) == 0) ) { n++; _candidates[row - 1][column - 1][0] = n; _candidates[row - 1][column - 1][n] = number; _numberOfCandidates++; } } } } } }
public void SetCandidates(SudokuBoard sudokuBoard) { int row, column, square, number, n; _numberOfCandidates = 0; for (row = 1; row <= 9; row++) { for (column = 1; column <= 9; column++) { square = 1 + (3 * ((row - 1) / 3)) + ((column - 1) / 3); if (sudokuBoard.IsSet(row, column)) { _candidates[row - 1][column - 1][0] = -1; //Indicates that the cell is set already } else { n = 0; this._candidates[row - 1][column - 1][0] = 0; //Number of candidates is set in index 0 for (number = 1; number <= 9; number++) { if ( (sudokuBoard.ReturnNumberOfOccurenciesOfNumber(number, row, Target.Row) == 0) && (sudokuBoard.ReturnNumberOfOccurenciesOfNumber(number, column, Target.Column) == 0) && (sudokuBoard.ReturnNumberOfOccurenciesOfNumber(number, square, Target.Square) == 0) ) { n++; _candidates[row - 1][column - 1][0] = n; _candidates[row - 1][column - 1][n] = number; _numberOfCandidates++; } } } } } }