A*算法

A*算法可视化视频和算法解释链接

A*算法是求解一个点到另一个点的最短路径,是针对点到点的最短路径算法。

A*算法是对bfs的改进,当求解一个源点到目标点的最短距离时,bfs会进行许多不必要的搜索,大大浪费了空间和效率,因此诞生了A*算法。

A*算法是一个启发式的搜索算法,它其实和迪杰斯特拉算法关系很大,它是在搜索的过程中加上一个对目标点的预估函数,通过预估函数可以加快我们搜索效率,预估函数相当于一个带了方向的bfs,特意往终点去搜索。

在堆中根据源点到当前点 + 当前点到目标点的预估距离来排序

剩下的细节和Dijskra算法完全已一样,只有在放入堆中的元素不一样

预估函数要求: 当前点到目标点的预估距离  <= 当前点到目标点的最短距离

预估目标点距离经常选择:
曼哈顿距离: |x1 - x2| + |y1 - y2|=(上下左右)

欧式距离: pow(sqrt(x2 - x1) + sqrt(y2 - y1), 2) (没有方向限制可以随便走)

对角线距离: max(abs(y2 - y1), abs(x2 - x1))(上下左右对角线)

 

posted @ 2024-01-26 16:39  lwj1239  阅读(67)  评论(0)    收藏  举报