引言
。
A算法是一种启发式的搜索算法,它是基于深度优先算法和广度优先算法的一种融合算法,按照一定规则确定如何选取下一个节点。在介绍A算法之前,需要了解一下什么是启发式搜索算法,深度优先算法以及广度优先算法。
启发式搜索算法
启发式搜索算法指的是,从起点出发,先寻找与起点相邻的栅格,判断它是否是前往终点最好的位置,基于这个栅格再往外向与其相邻的栅格扩展,找到一个当前时刻最好的位置,通过这样一步一步逼近终点,减少了盲目的搜索,提高了搜索的可行性和搜索效率。
深度优先算法
深度优先算法的思想是,搜索算法从起点开始搜索(初始状态下待搜索区域的节点都未被访问),将起点周围所有邻点进行比较,选择其中距离终点最近的节点进行存储,然后再以该邻点为基础对比其周围未被访问的所有邻点,仍然选择距离终点最近的邻点进行存储。
若访问完所有节点仍未到达终点则视为搜索失败,搜索成功所存储的节点连接形成的路径即为起点到终点的路径
广度优先算法
广度优先算法的原理是,从起点出发依次访问与它相连接的邻点,访问完毕后再从这些邻点出发访问邻点的邻点,但是要保证先被访问的邻点的邻点要比后被访问的邻点的邻点先访问,直到图中所有已被访问的节点的邻点都能被访问到。如果此时图中还有未被访问的节点,则需要选取一个未被访问的节点作为起点继续搜索访问,直到图中所有的节点都能被访问到。
A*算法
基于深度优先算法和广度优先算法的优缺点,A*算法基于启发函数构建了代价函数,既考虑了新节点距离起点的代价,又考虑了新节点距离目标点的代价。
地图
我们把要搜寻的区域划分成了正方形的格子。这是寻路的第一步,简化搜索区域,这个方法把我们的搜索区域简化为了 2 维数组。数组的每一项代表一个格子,它的状态就是可走和不可走。蓝色是墙壁,为不可走状态。通过计算出从绿色格子到红色格子需要走过哪些方格,就找到了路径。一旦路径找到了,人物便从一个方格的中心移动到另一个方格的中心,直至到达目的地。
寻路步骤
- 先将起点放入开启列表(即OPEN表,存放的是未访问的节点)
- 寻找起点周围可以到达的节点,将它们放入开启列表,并将它们的父节点设置为起点
- 从开启列表中删除起点,将它放入关闭列表(即CLOSE表,存放的是已经访问过的节点)