全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C++如何实现一个A*寻路算法?C++游戏AI与路径规划【算法实战】

A*算法用优先队列按f(n)=g(n)+h(n)扩展最有希望节点,g为起点到当前实际代价,h为到目标预估代价(如曼哈顿距离),需维护开放列表(最小堆)、关闭列表和地图数据,保证最优性需h可容许。

核心思路:用优先队列驱动的启发式搜索

不是暴力遍历所有格子,而是每次从“最有希望到达终点”的节点开始扩展。关键靠两个值:f(n) = g(n) + h(n)。其中 g(n) 是从起点到当前节点的实际代价(比如走过的格子数或距离和),h(n) 是从当前节点到目标的预估代价(常用曼哈顿距离或欧几里得距离)。优先队列按 f(n) 升序排列,保证最先出队的是当前综合代价最小的节点。

数据结构准备:节点与开放/关闭集合

定义一个结构体封装节点信息:

// 示例:2D网格中每个格子的表示
struct Node {
  int x, y;
  float g, f;
  Node* parent = nullptr;
  Node(int x, int y) : x(x), y(y), g(0), f(0) {}
};

需要三个容器:

  • 开放列表(open set):用 std::priority_queuestd::set 存储待探索节点,按 f 排序
  • 关闭列表(closed set):用 std::unordered_set(配合自定义哈希)或 std::set 记录已完全处理的坐标,避免重复访问
  • 地图数据:二维 vector 或数组,标记是否可通行(如 grid[y][x] == 0 表示空地)

主循环:扩展、计算、更新

算法主体是 while 循环,直到开放列表为空或找到终点:

  • 取出 f 最小的节点 current
  • current 是终点,调用回溯函数(从 parent 指针一路返回起点)生成路径
  • 否则将其加入关闭列表,检查上下左右(或八方向)邻居
  • 对每个合法邻居 next(在地图内、未被阻挡、不在关闭列表中):
    • 计算新 g 值(current.g + cost(current → next),通常为 1 或 sqrt(2))
    • next 不在开放列表中,或新 g 更小,则更新其 gfparent,并插入或重新排序开放列表

实用优化与注意事项

真实游戏里不能只写个“能跑通”的版本:

  • 启发函数要可容许(admissible)h(n) 不能高估真实代价,否则不保证最优;曼哈顿距离适合四向移动,欧氏距离适合八向,对角线移动可用切比雪夫距离
  • 避免浮点误差影响排序:用整数运算或加小偏移量;priority_queue 需自定义比较器,注意 operator 是大顶堆,要反着写
  • 内存友好:不每次都 new Node,可用对象池或二维数组预分配节点;用坐标哈希代替指针比较更稳定
  • 提前终止与失败处理:开放列表空了还没到终点,说明不可达,返回空路径

基本上就这些。写出来不到 200 行,但调通路径、处理斜向、适配不同地图格式才是实际耗时点。


# node  # ai  # c++  # cos  # 排列  # red  # Float  # while  # 封装  # 结构体  # int  # 循环  # 指针  # 数据结构  #   # Struct  # operator  # 对象  # 算法  # 曼哈顿  # 是从  # 自定义  # 最优  # 点到  # 的是  # 欧几里得  # 升序  # 最有希望  # 才是 


相关文章: 定制建站如何定义?其核心优势是什么?  建站之星安装路径如何正确选择及配置?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  建站主机CVM配置优化、SEO策略与性能提升指南  为什么Go需要go mod文件_Go go mod文件作用说明  如何破解联通资金短缺导致的基站建设难题?  如何通过可视化优化提升建站效果?  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  定制建站是什么?如何实现个性化需求?  ,柠檬视频怎样兑换vip?  建站之星如何快速解决建站难题?  如何快速搭建高效可靠的建站解决方案?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  建站中国官网:模板定制+SEO优化+建站流程一站式指南  音乐网站服务器如何优化API响应速度?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  建站之星收费标准详解:套餐费用及年费价格表一览  建站主机与虚拟主机有何区别?如何选择最优方案?  如何登录建站主机?访问步骤全解析  ,sp开头的版面叫什么?  制作旅游网站html,怎样注册旅游网站?  一键网站制作软件,义乌购一件代发流程?  如何通过cPanel快速搭建网站?  免费制作小说封面的网站有哪些,怎么接网站批量的封面单?  已有域名和空间如何搭建网站?  建站之星后台密码遗忘或太弱?如何重置与强化?  宝塔面板如何快速创建新站点?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  专业公司网站制作公司,用什么语言做企业网站比较好?  建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析  建站主机默认首页配置指南:核心功能与访问路径优化  如何在阿里云虚拟主机上快速搭建个人网站?    建站之星微信建站一键生成小程序+多端营销系统  如何基于云服务器快速搭建个人网站?  建站三合一如何选?哪家性价比更高?  如何配置WinSCP新建站点的密钥验证步骤?  如何用已有域名快速搭建网站?  如何通过虚拟机搭建网站?详细步骤解析  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  b2c电商网站制作流程,b2c水平综合的电商平台?  如何用IIS7快速搭建并优化网站站点?  专业网站建设制作报价,网页设计制作要考什么证?  如何选择最佳自助建站系统?快速指南解析优劣  建站之星代理如何获取技术支持?  如何快速选择适合个人网站的云服务器配置?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  如何通过VPS建站实现广告与增值服务盈利?  建站之星后台管理:高效配置与模板优化提升用户体验 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。