private bool Solve(List <int>[,] possibleValues) { if (FindBestCellToFill(possibleValues, out Point bestCell)) { List <int> values = possibleValues[bestCell.Y, bestCell.X]; foreach (int value in values) { _currentBoard.Set(bestCell, value); if (!_currentBoard.HasError(bestCell)) { if (Solve(possibleValues)) { return(true); } } _currentBoard.Set(bestCell, 0); } return(false); } return(true); }