有没有更快得寻路,A*慢得要死

dot99 2004-04-11 11:26:47
A*慢得我想吐大便了~~
怎么优化,怎么换H函数都不行,等他寻完,到是可以走最短的路过去~但是,那个速度........

我的天~~~

哪个介绍一下更快的最短路径寻路~~~

前提是,不知道地图数据,需要调用游戏里面的call

跟踪怪和逃跑用的是另外一套寻路

ps:是在做外挂自动挂机,走迷宫(太多的凹型障碍,没法用上面那套)
地图数据太难分析了~~~乱七八糟的~而且同块地图要读取n个文件,除去mask,贴图数据,都还有.....
...全文
184 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
火云洞红孩儿 2004-04-11
  • 打赏
  • 举报
回复
我做过4张128*128格子的跨地图A星寻路。
我没有用标准的网上的A星寻路。
只定义了一个链表。
不过里面有一个bool IsClose;
初始化时IsClose=false;
一旦在估价过后如果要做为Close表,直接将IsClose设为True就好了。
另有一个数值变量指示Close表的结尾。此变量值之后的结点就是Open表。


heretic 2004-04-11
  • 打赏
  • 举报
回复
我做传奇3地图寻径最初用的是从网上下载的标准A*算法源码,一旦超过200*200就很慢。我分析了一下,慢在三个地方:

1.判断一个坐标是否在open链表里,原算法采用了顺序搜索;
2.判断一个坐标是否在close链表里,原算法采用了顺序搜索;
3.将坐标点插入open链表,原算法采用了顺序搜索;

这两个链表平均可达上百的坐标点,如此算法实现的效率是相当低的。

我的改进如下:
1.定义open数组A,800*800*sizeof(DWORD)尺寸,如果(x,y)在open链表中,则A[x][y]指向open链表中对应的节点;
2.定义close数组B,800*800*sizeof(DWORD)尺寸,如果(x,y)在close链表中,则B[x][y]指向close链表中对应的节点;
3.实际上open链表中每个节点的评价值在任一时刻只有三个可能值:n,n+1,n+2。这样可以随时记录并调整这三个值,并记录这三个值在open链表中对应的首节点,以实现高效插入。

改进的算法在比奇800*800地图最慢1秒左右,潘夜岛有一部分与其它部分不通,计算时需要3秒,结果是不通。
wlpwind 2004-04-11
  • 打赏
  • 举报
回复
将可以走的地方标出来,从原点开始用宽度优先遍历。
dot99 2004-04-11
  • 打赏
  • 举报
回复
to wlpwind(robin):
工作量大啊~~~~
不过很想采用地图采样点这个做法~~~
dot99 2004-04-11
  • 打赏
  • 举报
回复
Open表Close表我在考虑用hash表
排序是在是他奶奶的慢~~~O(nlogn)在东西多了以后还是慢得出奇

外加导航点吸引力这个限制,应该会更快一点~~~

24个小时没睡了~~~准备小睡一下

半夜起来加条件~~~~~可恶的H函数
dot99 2004-04-11
  • 打赏
  • 举报
回复
嘿嘿,我刚也改成了大数组
原来我是用vector做的
自己懒得写排序,用的GP
没想到巨慢
还是自己写的好~~
而且8方向寻路最好的distance函数应该用pythagoras函数
我现在在加入其他的限制条件

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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