private void SetCurrentPositionToZero(SudokuBoard board, Position position) { if (!_isSolved) { board.Set(position, 0); } }
private bool IsSolvable(SudokuBoard board, Position position) { var availableNumbers = board.GetAllAvailableNumbersForCell(position); _isSolved = !board.ContainsZero() && IsFinalPosition(position); var nextAvailablePosition = Position.GetNextAvailablePosition(position); for (var num = 0; num < availableNumbers.Count; num++) { if (_isSolved) { break; } var number = availableNumbers[num]; if (IsNotValidNumber(board, position, nextAvailablePosition, number)) { continue; } board.Set(position, number); IsSolvable(board, nextAvailablePosition); SetCurrentPositionToZero(board, position); } return(_isSolved); }