一、算法介绍
(一)基本原理
A * 算法是一种启发式搜索算法,用于在图或网格等环境中寻找从起始点到目标点的最优路径。它结合了 Dijkstra 算法的广度优先搜索特性和贪心最佳优先搜索的启发式估计,通过评估函数来决定搜索方向,从而更高效地找到最短路径。
(二)核心要素
- 评估函数:。其中,是节点的综合评估值,是从起始节点到节点的实际代价(如走过的距离),是从节点到目标节点的启发式估计代价。
- 启发式函数:的选择至关重要。一个好的启发式函数应该是可接受的(即它永远不会高估从节点到目标节点的实际代价)和一致的(满足三角不等式)。常见的启发式函数如在二维平面中,两点间的欧几里得距离或曼哈顿距离。
(三)算法流程
- 初始化:
- 创建两个列表,一个是开放列表(open list),用于存储待探索的节点,另一个是关闭列表(closed list),用于存储已经探索过的节点。
- 将起始节点放入开放列表,并设置其值为,值根据评估函数计算。
- 搜索循环:
- 从开放列表中选择值最小的节点作为当前节点。
- 如果当前节点是目标节点,则搜索成功,通过回溯父节点来构建路径。
- 将当前节点从开放列表移到关闭列表。
- 遍历当前节点的所有相邻节点。
- 如果相邻节点在关闭列表中,则跳过。
- 计算相邻节点的值(通过当前节点的值加上从当前节点到相邻节点的代价)。
- 如果相邻节点不在开放列表中,则将其添加到开放列表,并设置其值、值和值,同时记录其父节点为当前节点。
- 如果相邻节点已经在开放列表中,比较新计算的值和原来的值,如果新值更小,则更新其值、值和父