A Star算法(C++仅头文件实现)

7 篇文章 0 订阅

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)]

在这里插入图片描述

代码获取

https://github.com/AZMDDY/astar

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值