A*路径寻找算法入门来源于:GameDev
net作者:PatrickLester原文URL:http://www
gamedev
net/reference/articles/article2003
asp翻译:孙璨虽然A*(读作A星)算法对初学者来说是比较深奥难懂,但是一旦你找到门路了,它又会变得非常简单
网上有很多解释A*算法的文章,但是大多数是写给那些有一定基础的人看的,而您看到的这一篇呢,是真正写给菜鸟的
本篇文章并不想给这个算法题目作一些权威性论断,而是阐述它的基本原理,并为你理解更多相关资料与讨论打下基础
文章末尾给出了一些比较好的链接,放在“进阶阅读”一节之后
最后,本文不是编程规范,你将可能使这里讲述的东西编写成任何计算机语言
在本文的末尾我还给出了一个例子程序包的下载链接,也许正合你意
在这个包中有C++和BlitzBasic两个版本的程序代码,如果你只是想看看A*算法是如何运作的,该包中也有可直接执行的文件供你研究
我们还是要超越自己的(把算法弄懂),所以,让我们从头开始吧
初步:搜索区域我们假设某个人要从A点到达B点,而一堵墙把这两个点隔开了,如下图所示,绿色部分代表起点A,红色部分代表终点B,蓝色方块部分代表之间的墙
[图一]你首先会注意到我们把这一块搜索区域分成了一个一个的方格,如此这般,使搜索区域简单化,正是寻找路径的第一步
这种方法将我们的搜索区域简化成了一个普通的二维数组
数组中的每一个元素表示对应的一个方格,该方格的状态被标记为可通过的和不可通过的
通过找出从A点到B点所经过的方格,就能得到AB之间的路径
当路径找出来以后,这个人就可以从一个格子中央移动到另一个格子中央,直到抵达目的地
这些格子的中点叫做节点
当你在其他地方看到有关寻找路径的东西时,你会经常发现人们在讨论节点
为什么不直接把它们称作方格呢
因为你不一定要把你的搜索区域分隔