A* 算法是一种在机器人导航和路径规划中常用的算法。它结合了 Dijkstra 算法的启发式搜索和 Greedy Best-First 算法的优先级搜索,能够高效地找到从起点到终点的最短路径。
算法原理
A* 算法通过评估函数来评估每个节点的优先级。评估函数由两个部分组成:一是从起点到当前节点的实际代价(g 值),二是从当前节点到终点的预估代价(h 值)。最终,每个节点的优先级由 g 值和 h 值之和决定。
- g 值:从起点到当前节点的实际代价。
- h 值:从当前节点到终点的预估代价,通常使用启发式函数计算。
- f 值:评估函数,f = g + h。
算法步骤
- 初始化开放列表(Open List)和封闭列表(Closed List)。
- 将起点添加到开放列表。
- 当开放列表不为空时,执行以下步骤:
- 从开放列表中找到 f 值最小的节点,将其标记为当前节点。
- 将当前节点从开放列表移除,并添加到封闭列表。
- 对于当前节点的每个邻居节点,执行以下步骤:
- 如果邻居节点已经在封闭列表中,跳过。
- 计算邻居节点的 g 值和 h 值。
- 如果邻居节点不在开放列表中,将其添加到开放列表。
- 如果邻居节点已经在开放列表中,但新的 g 值更小,则更新邻居节点的 g 值和 f 值。
- 当开放列表为空时,算法结束。
代码示例
以下是一个简单的 A* 算法 Python 代码示例:
# ...(代码省略)
# 代码示例结束
扩展阅读
更多关于 A* 算法的细节和实现,可以参考以下链接:
A* 算法流程图