C#写的QQ连连看外挂源码(寻路算法史无前例)

小学码农 2011-06-18 01:27:40
连连看寻路的算法一般人认为有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
...全文
630 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
weike021996 2011-06-18
  • 打赏
  • 举报
回复
不懂,学习,学习
matrixcl 2011-06-18
  • 打赏
  • 举报
回复
我更关心楼主怎么获取布局信息的,图像识别?


算法就算烂点,也比人点的快不是?起码也能用,呵呵
lihanbing 2011-06-18
  • 打赏
  • 举报
回复
不都是这么算吗??????
porschev 2011-06-18
  • 打赏
  • 举报
回复

强力。。。
lkang08 2011-06-18
  • 打赏
  • 举报
回复
顶起!!
wtj2832 2011-06-18
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复

学习一下
xuexiaodong2009 2011-06-18
  • 打赏
  • 举报
回复
学习了

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧