internal int[,] RemoveLocationsWithPossibleValueCount(int[,] board, Location location, int possibleValuCount) { //random generator var randomizer = new Random(); //create a copy of the board var updatedBoard = CommonMethods.CopyBoard(board, boardInfo.BoardSize); //get the locations that are connected to the random location var connectedLocations = GetConnectedLocations(location); updatedBoard[location.Coloumn, location.Row] = 0; //get the possible values var locationPossibleValue = SudokuBoardSolver.GetPosiiblePlaceValues(location, updatedBoard, boardInfo.BoardSize, boardInfo.InnerBoardSize); while (locationPossibleValue.Count() < possibleValuCount) { //get the value to be removed var valueToBeRemoved = (int)(randomizer.NextDouble() * (boardInfo.BoardSize - 1)) + 1; //remove the value from the board RemoveValueFromBoardAtLocations(updatedBoard, connectedLocations.ColoumnConnections, valueToBeRemoved); RemoveValueFromBoardAtLocations(updatedBoard, connectedLocations.RowConnections, valueToBeRemoved); RemoveValueFromBoardAtLocations(updatedBoard, connectedLocations.InnerBlockConnections, valueToBeRemoved); //get the possible values locationPossibleValue = SudokuBoardSolver.GetPosiiblePlaceValues(location, updatedBoard, boardInfo.BoardSize, boardInfo.InnerBoardSize); } //add the connected locations to the used connected locations list usedConnectedLocations.AddRange(connectedLocations.ColoumnConnections); usedConnectedLocations.AddRange(connectedLocations.RowConnections); usedConnectedLocations.AddRange(connectedLocations.InnerBlockConnections); return(updatedBoard); }
static void Main(string[] args) { //sudoku solver testing var sudokuSolver = new SudokuBoardSolver(100); //setup the board int[,] board = new int[9, 9]; board[3, 0] = 1; board[4, 0] = 8; board[8, 0] = 9; board[6, 1] = 4; board[8, 1] = 7; board[2, 2] = 7; board[7, 2] = 2; board[8, 2] = 8; board[5, 3] = 6; board[8, 3] = 5; board[0, 4] = 8; board[1, 4] = 3; board[3, 4] = 9; board[4, 4] = 1; board[5, 4] = 4; board[7, 4] = 7; board[8, 4] = 2; board[0, 5] = 4; board[3, 5] = 5; board[0, 6] = 7; board[1, 6] = 5; board[6, 6] = 2; board[0, 7] = 2; board[2, 7] = 4; board[0, 8] = 3; board[4, 8] = 5; board[5, 8] = 9; var solutionBoards = sudokuSolver.Solve(new SudokuProblemDTO { SudokuBoard = board }); //Console.WriteLine("Intial Board"); //Console.WriteLine(); //PrintBoard(board); //Console.WriteLine(); //Console.WriteLine(); //Console.WriteLine("Solved Board"); //Console.WriteLine(); //PrintBoard(solutionBoards.SolvedBoards.First()); //Console.WriteLine(); //Console.WriteLine(); //Console.WriteLine(); //sudoku generator testing var solvedBoard = solutionBoards.SolvedBoards.First(); var sudokuGenerator = new SudokuBoardGenerator(); var unsolvedBoard = sudokuGenerator.GenerateSudokuBoardWithDifficultySetting(solvedBoard, BoardPresetDifficulty_9X9.DifficultySetting); Console.WriteLine("Solved Board"); Console.WriteLine(); PrintBoard(solvedBoard); Console.WriteLine(); Console.WriteLine(); Console.WriteLine("Unsolved Board"); Console.WriteLine(); PrintBoard(unsolvedBoard); Console.WriteLine(); Console.WriteLine(); Console.WriteLine(); Console.ReadLine(); }