private int EdgeCoverage(int x, int y, bool[,] continuousVisited, bool[,] edgesVisited, Color[,] board)
        {
            continuousVisited.SetAt(x, y, true);
            Color thisColor = board.GetAt(x, y);
            int   result    = 0;

            if (board.CanGetLeft(x) && !continuousVisited.GetLeftOf(x, y))
            {
                if (thisColor == board.GetLeftOf(x, y))
                {
                    result += EdgeCoverage(x - 1, y, continuousVisited, edgesVisited, board);
                }
                else if (!edgesVisited.GetLeftOf(x, y))
                {
                    edgesVisited.SetLeftOf(x, y, true);
                    result++;
                }
            }
            if (board.CanGetAbove(y) && !continuousVisited.GetAboveOf(x, y))
            {
                if (thisColor == board.GetAboveOf(x, y))
                {
                    result += EdgeCoverage(x, y - 1, continuousVisited, edgesVisited, board);
                }
                else if (!edgesVisited.GetAboveOf(x, y))
                {
                    edgesVisited.SetAboveOf(x, y, true);
                    result++;
                }
            }
            if (board.CanGetRight(x) && !continuousVisited.GetRightOf(x, y))
            {
                if (thisColor == board.GetRightOf(x, y))
                {
                    result += EdgeCoverage(x + 1, y, continuousVisited, edgesVisited, board);
                }
                else if (!edgesVisited.GetRightOf(x, y))
                {
                    edgesVisited.SetRightOf(x, y, true);
                    result++;
                }
            }
            if (board.CanGetBelow(y) && !continuousVisited.GetBelowOf(x, y))
            {
                if (thisColor == board.GetBelowOf(x, y))
                {
                    result += EdgeCoverage(x, y + 1, continuousVisited, edgesVisited, board);
                }
                else if (!edgesVisited.GetBelowOf(x, y))
                {
                    edgesVisited.SetBelowOf(x, y, true);
                    result++;
                }
            }
            return(result);
        }