A Star算法(C++仅头文件实现)
A Star算法介绍
项目介绍
- base.hpp: 定义了一个日志宏,用于调试;
- point.hpp: 对点进行封装,提供接口;
- map.hpp: 对地图进行封装,提供一些地图的接口;
- astar.hpp: A*算法的核心文件,AStar类提供两个接口用于加载地图和生成路径;
- MoveCast(): 计算在从start到end的代价;
- PointVaild(): 判断点在地图中是否可用(不是障碍物,没有越界);
- InOpenZone(): 判断点是否在
openZone
中; - MigratePoint(): 计算一个点附近所有的可用点的优先级,并纳管到
openZone
; - LoadMap(): 加载地图;
- FindPath(): 生成路径;
- PointCost: 由于每个点都需要存它到起点的代价和预计到终端的代价之和,所以定义了一个内部类,对于路径的回溯,需要定义父节点,在类中使用了智能指针(shared_ptr)去存父节点,在使用时,直接构造(make_shared)父节点;
- openZone:存放待考察的点,由于是根据代价优先级来取下一个考察点,所有使用了优先队列;
- closeZone: 存放已经考察了的点,在这里仅仅需要点的信息,所以用映射或者数组就可以标记(二维坐标可以用一个数来表示,(i, j) -> (j * row + i)),并提供
O(1)
的查找; - MoveType: 定义了在地图上移动的类型,D4: 可以向上下左右4个方向移动,D8: 可以向8个方向移动;
演示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3gLAttg0-1603119704724)(https://raw.githubusercontent.com/AZMDDY/imgs/master/tutieshi_640x288_16s.gif)]