Exemple #1
0
        private bool _TrySolve(SquareTracker <TPuzzle> tracker)
        {
            var puzzle = tracker.Puzzle;

            if (puzzle.NumEmptySquares == 0)
            {
                return(true);
            }
            Coordinate c = tracker.GetBestCoordinateToGuess();
            Span <int> possibleValues = stackalloc int[puzzle.Size];
            int        numPossible    = tracker.PopulatePossibleValues(in c, possibleValues);

            for (int i = 0; i < numPossible; ++i)
            {
                int possibleValue = possibleValues[i];
                if (tracker.TrySet(in c, possibleValue))
                {
                    if (_TrySolve(tracker))
                    {
                        return(true);
                    }
                    tracker.UnsetLast();
                }
            }
            return(false);
        }
        private bool _TrySolve()
        {
            if (_tracker.Puzzle.NumEmptySquares == 0)
            {
                return(true);
            }
            Coordinate c = _tracker.GetBestCoordinateToGuess();

            foreach (int possibleValue in _tracker.GetPossibleValues(in c))
            {
                if (_tracker.TrySet(in c, possibleValue))
                {
                    if (_TrySolve())
                    {
                        return(true);
                    }
                    _tracker.UnsetLast();
                }
            }
            return(false);
        }