Rate this post
在现实生活中,我们经常需要找到最短路径。例如,当我们想要从一个地点去往另一个地点的时候,我们希望可以在地图中找到最近的一条路。这个时候我们就需要一些特殊的算法来帮助我们解决这个问题。A *搜索算法是静态路网中求解最短路径的最流行的技术之一,静态路网指的就是被搜索的图的权值不随时间变化。接下来,我将讨论A*算法的基本内容。
1.
把起点加入 open list (已生成而未考察的节点)。
2. 重复如下过程:
(1)
遍历 open list,查找 F值 (从初始栅格单元经由当前栅格单元到目标栅格单元的代价估计)最小的节点(栅格单元),把它作为当前要处理的节点。
(2)
把这个节点(栅格单元)移到 close list(已访问过的节点) 。
(3)
对当前方格的 8 个相邻方格进行一一计算
a.
如果它被障碍物占用或者它在 close list 中,忽略它。否则,做如下操作。
b.
如果它不在 open list 中,把它加入 open list,并且把当前方格设置为它的父节点,记录该方格的 F,G(初始节点到当前节点的实际代价) 和 H(当前节点到目标节点的最佳路径的估计代价)值。
c.
如果它已经在 open list 中,检查这条路径 (即经由当前结点到达它那里) 是否更好,用 G 值作参考。更小的 G 值表示这是更好的路径。如果是这样,把它的父节点设置为当前方格,并重新计算它的 G 和 F 值。如果 open list 是按 F 值排序的话,改变后可能需要重新排序。
2.1停止重复的条件:
(1)把终点加入到了 open list 中,此时路径已经找到
(2)或者查找终点失败,并且 open list 是空的,此时没有路径。
3.保存路径。从终点开始,每个方格沿着父节点移动直至起点,这就是最终的搜索的路径。
OPEN表保存所有已生成而未考察的节点,CLOSED表中记录已访问过的节点。