1. 基本原理

A*算法的本质是广度优先的图搜索.意在寻找一个从起点到目标节点的最短路径.

A*算法在Dijkstra的基础上加入了启发式变量,一般用启发式距离(两点的直线距离)表示.

71cc176c75b92a56b0ab9f38e789a969.png
启发式距离

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(非工程文件,需自行配置),有不明白的可以在评论区留言,我会尽量回复.

aStar​github.com
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐