- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
这一次我们检查邻接格子发现右边是墙
游戏,虽然05年的国庆古书事件对网易声誉有一定影响,还是老牌的网络游戏,寻径几乎都是难以回避的一个话题,而寻径必然从A*算法开始。关于A*国外相关的资料相当丰富,很多时候让我们为难的还不是具体的算法,而是A*的基本思路和概念。很多门槛都是从一堆陌生的概念开始的。而本文则是A*算法真正入门级的读物,不仅仅是清除了概念上的障碍还给出了相关话题深入学习的线索。文中有几点模糊的地方,我已经和原作者沟通过,后面会专门讲述。By Patrick Lester(Updated July 18,2005)A*(读作A星)算法对初学者可能略显复杂.虽然网络上已经有很多讲解A*算法的文章,但大多数都是为那些已经具备基础知识的人写的.而本文特为真正新手准备.本文并不是要给出这个问题的终极篇,而是阐述一些基础问题,帮你做好拓展阅读的准备,能真正明白他们在说什么.文章最后给出了其中佼佼者的链接供继续阅读.最后一点,本文并非针对具体方案.你可以把这里讨论的东西转换成任何计算机语言实现.正如你所期望的,文章最后给出了示例代码的下载链接.该示例程序包含C++和Blitz Basic两个版本.如果你仅仅想看一下效果A*算法的执行效果,里面有可执行文件.我们正在超越自己.我们开始…入门:搜索区假设有一个人要从A点到B点去中间有一墙之隔,如下图所示.绿色是出发点,红色是终点,蓝色填充的正方形代表墙.首先应该注意到的是我们已经把搜索区域划分成了方格.把搜索区进行简化,这是寻径的第一步.这种特殊的方法可以帮我们把搜索区简化成一个二维的数组.数组的每一项代表方形区域的一个格子,它的状态用通行和禁行表示.寻径就是要找出从A点到B点要走的格子.一旦路径确立,这个人就可以从一个格子的中心到另一格子的中心直至到达目的地.这些中心点被称作节点.当你阅读其他寻径的材料,你会经常看到人们讨论节点.为什么不直接叫它们方格呢?因为很有可能你切分出来的并不是一定是方形.它们实际上有可能是长方形,六角形,三角形,或者任何形状.节点包围在各种形状里,可能被放在任意位置--中心或者沿边缘,或任何其他地方.我们使用这个概念系统,因为它最简单.开始搜索一旦我们像上面一样把搜索区域简化成可接受数量的节点,下一步就是进行搜索,寻找最短路径.我们从A点开始这项工作,检查邻接区域,并开始向外扩大搜索范围直至找到目标点.我们按照下面的步骤开始搜索:1.从A点开始,先把它加入到待计算的open list中.这个open list就像一个购物清单一样.现在清单里面只有一项,后面会有更多.这个清单里面包含了备选路径可能经过的区域或者不经过的区域.基本上这就是一个格子的待查列表.2.忽略那些有墙,有水,或者非正常的格子,看一下与出发点邻接的所有可到达或者可通过的区域.把它们也加入到open list.这里面每一个节点都把A节点作为它的父节点(parent square).父节点是我们在做回溯路径时很重要的一个概念.后面会有详细说明.3.从准入区域清单中去掉起始点A,并把它加入到closed list中.closed list是指从现在开始就不用再考虑的区域.说到这里,你脑海里应该有一个形象化的东西了,就像下面的图展示的.黑-绿区域的中心是你的开始区域.边缘浅蓝色是表示该区域已经加入了closed list.所有的邻接区域现在都放在open list中待查,它们的边缘被标记成浅绿色,,每一个区域都有一个灰色的指针指向父节点,即开始节点.下面,我们从open list列表中选择一个邻接区域,或多或少的重复上面的过程,如下所述.但是应该选择哪个区域呢?F成本最低的那一个!路径评分决定使用哪一个区域来构成路径,关键在于下面的等式:F=G+H这里G=沿着生成的路径,从开始节点A到指定区域的移动消耗.H=估算从指定区域格子到目的地格子(B节点)的移动消耗.通常这被称为启发式,这可能有一点不好理解.之所以这样叫是因为有一个猜的行为.由于路上可能遇到各种情况(墙,水,等等),直到我们找到路径才能知道实际的距离.本文会给出一个计算H的算法,网上还可以找到很多其它的方法.路径是通过反复遍历open list并选择最低F值产生的.这个过程后面会详述.首先近距离看一下如何计算这个等式.如上所述,G是从开始节点A沿着生成的路径到指定区域的移动消耗.本例中,我们设每水平或垂直移动一个区域消耗移动力10,对角线消耗14移动力.使用这样的数值是因为实际的对角移动距离是2的平方根(别害怕),大约是水平或垂直移动消耗力的1.414倍.简单起见我们使用10和14.这样做使得比例大约正确并且避开了计算平方根和小数.这并不是因为我们笨不喜欢数学,而是使用这些整数计算要快得多.后面你就会发现,如果不使用这样的捷径计算,寻径可
文档评论(0)