作者:锐亚教育(www.insideria.cn)
A*寻路
A*算法基本原理
A*(念作A星)算法对初学者来说的确有些难度。本文并不试图对这个话题作权威性的陈述,取而代之的是描述算法的原理,使你可以在进一步的阅读中理解其他相关的资料。下面我们就利用图文并茂的方式向大家展示它的基本原理。
简化搜索区域
如图1所示,假设有人想从A点移动到一墙之隔的B点,如下图,绿色的是起点A,红色是终点B,蓝色方块是中间的墙。
图1
首先注意到,搜索区域被我们划分成了方形网格。像这样,简化搜索区域,是寻路的第一步。这一方法把搜索区域简化成了一个二维数组。数组的每一个元素是网格的一个方块,方块被标记为可通过和不可通过两种。路径被描述为从A到B我们经过的方块的集合。一旦路径被找到,我们的人就从一个方格的中心走向另一个,直到到达目的地。
这些中间点被称为“节点”。当你阅读其他的寻路资料时,你将经常会看到人们讨论节点。为什么不把他们描述为方格呢?因为有可能你的路径被分割成其他不是方格的结构。他们完全可以是矩形,六角形,或者其他任意形状。节点能够被放置在形状的任意位置,可以在中心,也可以沿着边界,又或者在其他任何地方。我们使用这种系统,归根结底是由于它最简单。
开始搜索
正如我们处理图1中网格的方法,一旦搜索区域被转化为容易处理的节点,下一步就是去引导一次找到最短路径的搜索。在A*寻路算法中,我们通过从点A开始,检查相邻方格的方式,向外扩展直到找到目标。
我们做如下操作开始搜索:
从点A开始,并且把它作为待处理点存入一个“开启列表”。开启列表就像一张购物清单。尽管现在列表里只有一个元素,但以后就会多起来。你的路径可能会通过它包含的方格,也可能不