//Vyřeší Sudoku public void SolveBoard(SudokuBoard board) { //Sudoku je vyřešeno a víme že řešení není jedno, nejedeme dále if (solution != null || multipleSolutions) { return; } if (!board.IsValid()) { return; } //Vyplní všechna pole, která mají jen jednu možnost a najde pole s nejnižším počtem možností Point lowest = board.FindLowestPossibilities(); if (board.IsSolved()) { if (solution != null) { multipleSolutions = true; } else { solution = board.data; } return; } if (lowest.X == -1 || lowest.Y == -1) { return; } foreach (int num in board.FindPossibilities(lowest.X, lowest.Y)) { SudokuBoard cloneBoard = board.Clone(); cloneBoard.SetValue(lowest.X, lowest.Y, num); if (!cloneBoard.IsValid()) { continue; } SolveBoard(cloneBoard); } }