示例#1
0
        /// <summary>
        /// get random valid completed sudoku grid
        /// </summary>
        private void GetValidCompleteSudoku()
        {
            completeSudokuValues = ListExtensions.GetValidCompletedSudoku();

            for (int i = 1; i <= Board.Size; i++)
            {
                Board.GetSquareByID(i).FillWithValues(completeSudokuValues[i - 1]);
            }

            int numberOfRepetitions = generator.Next(minrowOrColumnSwaps, maxrowOrColumnSwaps);

            for (int i = 0; i < numberOfRepetitions; i++)
            {
                int option       = generator.Next(0, 5);
                int squareNumber = generator.Next(Board.SquaresPerDimension);

                int outerIndex  = squareNumber * Board.SquaresPerDimension;
                int innerIndex1 = generator.Next(Board.SquaresPerDimension);
                int innerIndex2 = generator.Next(Board.SquaresPerDimension);

                int first  = outerIndex + innerIndex1;
                int second = outerIndex + innerIndex2;

                switch (option)
                {
                case 0:
                    Board.SwapColumns(first, second);
                    break;

                case 1:
                    Board.SwapRows(first, second);
                    break;

                case 2:
                    Board.SwapColumnSquares(innerIndex1, innerIndex2);
                    break;

                case 3:
                    Board.SwapRowSquares(innerIndex1, innerIndex2);
                    break;

                case 4:
                    Board.Transponse();
                    break;

                default:
                    break;
                }
            }

            // set SolvedSudokuValues
            for (int i = 0; i < Board.Size; i++)
            {
                var row = new List <int>();
                for (int j = 0; j < Board.Size; j++)
                {
                    row.Add(int.Parse(Board[i, j].Value));
                }
                SolvedSudokuValues.Add(row);
            }
        }