一、引言
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之和。<
【算法复习】寻路算法1 - A星 A star
最新推荐文章于 2022-12-25 14:59:06 发布