【算法复习】寻路算法1 - A星 A star

本文详细介绍了A星(A*)算法,包括算法特点、基本概念和流程。A*算法结合了Dijkstra算法和启发式搜索,通过维护OPEN列表和CLOSE列表,找到从起点到终点的最短路径。算法中涉及的关键概念有起点s、终点goal、当前点u、相邻点v、不可到达点、父节点predecessor,以及g值、h值和f值的计算。A*算法利用manhattan距离作为启发式函数,并通过不断更新OPEN列表中的最小f值节点来推进搜索过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



一、引言
1.1 A星算法简介
注意到,本文对A星算法的简介是基于wiki和boost中的BGL库,这是因为:1、wiki的条件目是经过世界上成千上万人审阅,准确性可有保证,不像一些个人博客那样错漏(文后参考资料部分将对网上著名的文章评述);2、除了STL的标准库以外,boost可算是C++的准标准库,它对运行效率追求极致,可从这份高质量的代码中学到不少技巧;3、此外,网路上对BGL库的研究、分析、注释甚少,我个人经常使用该库,沿着“知其然并知其所以然”的学习方法,查看其源码有助于深入理解算法。
1.2 A星算法的特点
(1)在算法过程中,既寻找通往终点的短路径,同时又维护从起点到达当前点的短路径。
(2)维护一个称为OPEN列表的有序列表,保证在进入死胡同时可以跳出,又不必像Dijkstra那样全局搜索。假如把A星算法运行中,当前点比做一个机器人,OPEN列表就像是他的视野。A星算法使得该视野不会漫无目的地扩展(那会耗费太多时间),又可以保证视野在必要时扩展,绕出死胡同。
(3)算法由内外两个循环组成:外循环不断取出OPEN列表的最小值点,记为当前点;内循环处理当前点的周围一圈相邻点。
二、基本概念
2.1 起点s、终点goal、当前点u、相邻点v、不可到达点、父节点predecessor
当前点u:算法主要循环的主角
相邻点v:u点周围一圈8个相邻点
不可到达点:即图中设置的路障,不能成为路径的一部分
父节点predecessor:每个点都有一个父节点,初始时可以把所有点的父节点设成空(或者设成自己),算法完成后,从终点不断沿着父节点将会走到起点,这条路径就是A星最短路径。
2.2 w值、f值、g值、h值
w值:weight,即相邻两个点之间的边长,w(u,v)即指u、v两点之间的边长。按一般记法,上下左右直边的边长为10,四条斜边的边长为14。如下图。
f值:从起点s,沿某条路径到达某一点v,然后到达终点的总成本。可见,f值由两部分组成:1、从起点s沿路径到v,这部分成本称为g值;2、从当前v到终点距离,这部分成本称为h值(heuristic)。
g值:实质某条已产生路径的路径长度,即路径上所有边长w之和。<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值