1. 基本原理
A*算法的本质是广度优先的图搜索.意在寻找一个从起点到目标节点的最短路径.
A*算法在Dijkstra的基础上加入了启发式变量,一般用启发式距离(两点的直线距离)表示.
![71cc176c75b92a56b0ab9f38e789a969.png](https://i-blog.csdnimg.cn/blog_migrate/cba10367b51ccbc3913c245bc65087fc.jpeg)
2. 算法伪代码
本伪代码摘取自Principles of Robot Motion.
其中O代表优先队列,C存放着已访问过的节点.
3. 关键C++代码剖析
先来看看A*算法运行的最终结果吧
知乎视频www.zhihu.com首先先创建一个类代表节点(省略了构造函数等Method).
class
在main函数中定义起始节点和目标节点
node
初始化地图,这里计算了每个节点的启发式距离
for
添加障碍物
void
A*算法函数
void
4. 资源指路
最近一直没更新就是因为在写这个A*算法,其中大部分变量和算法过程我都尽量和Principles of Motion中的说明保持一致,源代码已上传github(非工程文件,需自行配置),有不明白的可以在评论区留言,我会尽量回复.
aStargithub.com