コード例 #1
0
        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++;
                            }
                        }
                    }
                }
            }
        }
コード例 #2
0
        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++;
                            }
                        }
                    }
                }
            }
        }