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);
        }