一、A*算法介绍
A*算法是一种路径搜索算法,用于在图形网络中找到最短路径。它结合了Dijkstra算法和启发式搜索的思想,通过综合利用已知的最短路径和估计的最短路径来优化搜索过程。在游戏自动寻路得到广泛应用。
二、A*算法的基本思想
- 在图形网络中选择一个起点和终点。
- 维护两个列表:开放列表和关闭列表。开放列表用于存储待考虑的节点,关闭列表用于存储已考虑过的节点。
- 将起点加入开放列表。
- 循环以下工作
- 当openSet为空时,结束程序,此时找不到路径。
- 从开放列表中选择f值最小节点current(考虑用优先队列)。
- openSet移出当前节点,closeList加入当前节点。
- 如果找到目标,则搜索结束,回溯最终路径。
- 否则,枚举所有相邻节点neighbor,若neighbor不可通过或者在closeList,则跳过。
- 计算当前节点的gScore。
- 假如neighbor或者没在openSet,或者在openSet但g值比gScore大,则计算出g值和h值,并设父节点为当前节点,将该点放入openSet。
其中,价值函数f(n)=g(n)+h(n),如下图所示。在只知道当前点和目标点的路径情况下,无法精确计算h值,故h(n)是一种预估值。选择方案为曼哈顿距离、欧几里距离等,最常用的是使用曼哈顿距离。
<