连连看寻路的算法一般人认为有2种1.递归算法(效率最差我从来不用)2.“#”字算法对于递归算法效率提高了N倍(递归算法会产生很多的节点“#”算法不存在这样的问题)为什么说我的算法史无前例呢(夸大)30行-40行的代码就能解决寻路问题你们说是不是史无前例?我现在的算法是取图片1X方向和y方向的可活动的范围
什么叫可活动范围?
如:
123456a89 如果234568都是路那么认为图a在x方向的活动范围是2到8
123b56789 如果1235都是路那么认为图b在x方向的活动范围是1到5
如果图a和图b是2个相同的图片那么我们如何判断2个图片是否可以消除呢?
只要判断公共部分2到5之间只要有一条可以直接相同的路我们就认为这2个图片可以消除!所以寻路这复杂的问题变成了获取公共部分,和公共部分之间是否有一条可以相同的路的问题
下面是获取图片活动的代码代码中的_boxNull就是路(也就是没有图片的地方)        /// <summary>
        /// 获取图片在水平方向可移动的范围
        /// </summary>
        private static List<int> GetRangeX(int x, int y)
        {
            List<int> list = new List<int>();
            int s = 0, e = 18;
            for (int i = x - 1; i >= 0; i--) if (_boxs[i, y].Type != _boxNull) { s = i + 1; break; }
            for (int i = x + 1; i < 19; i++) if (_boxs[i, y].Type != _boxNull) { e = i - 1; break; }
            for (int i = s; i <= e; i++) list.Add(i);
            return list;
        }        /// <summary>
        /// 获取图片在垂直方向可移动的范围
        /// </summary>
        private static List<int> GetRangeY(int x, int y)
        {
            List<int> list = new List<int>();
            int s = 0, e = 10;
            for (int i = y - 1; i >= 0; i--) if (_boxs[x, i].Type != _boxNull) { s = i + 1; break; }
            for (int i = y + 1; i < 11; i++) if (_boxs[x, i].Type != _boxNull) { e = i - 1; break; }
            for (int i = s; i <= e; i++) list.Add(i);
            return list;
        }有了图片的活动范围我们如何获取公共部分呢?这个代码非常的简单(Linq真方便)//获取X方向2个图片拥有相同的X坐标
List<int> list = GetRangeX(x1, y1).Intersect(GetRangeX(x2, y2)).ToList();y方向的公共部分和上述几乎一样只是坐标改一下
有了公共部分的代码我们判断图片是否可以消除就变得非常方便了            if (list.Count != 0)
            {
                for (int i = 0; i < list.Count; i++)
                {
                    Flag = true;
                    for (int j = Math.Min(y1, y2) + 1; j <= Math.Max(y1, y2) -1; j++)
                        if (_boxs[list[i], j].Type != _boxNull) { Flag = false; break; }
                    if (Flag) return true;
                }
            }以上只是代码片段!我只是给大家提供个最有效的方法如果需要更深层次的探讨加我Q:260398224