【附源码工程】Unity3D 支持代价的A星寻路和优化(二叉堆,寻路节点合并,相邻节点预先存储)
来源:互联网 发布:希腊经济知乎 编辑:程序博客网 时间:2024/06/14 11:11
最近项目中需要自己写a星寻路,上网查阅来一些资料,不是不完整不支持网格权重就是没有优化效率差,于是自己整理优化写了一个,效率比原始没有任何优化的快一个量级(自己的项目中,400格子 优化前 27ms优化后 1.4ms)
思路:
对比http://www.cnblogs.com/yangyxd/articles/5447889.html这篇博客内的原始a星。
A星的消耗主要集中在对寻路节点对探索和回溯,理所当然最显而易见的优化办法就是减少网格数量(用一个大格子替代几个小格子),然后遇事不决先打表(空间换时间),把算法中遍历判断临近节点的那部存在寻路节点自身数据里,这样可以省去运行时的部分消耗,同时数据结用二叉堆节省取最小值的计算成本(不在寻路内进行计算最小值的操作,费时)。
这是格子合并前的 可以看到一个个格子大小相同,格子数量(搜索空间)一共448个。
经过算法合并处理后如下:
格子变成来2*2的大格子和一些填充中间间隙的小格子,经过合并后 格式数量降低到了142个 大幅度缩小了搜索空间,同时在进行小个子合并成大格子之后还把相邻信息记录在格子本身
省去寻路时候便利获取临近格子的计算,尽可能在烘焙的时候一次性计算优化结构,减少寻路时候的开销。
最后附上例子工程,单独抽离寻路部分,临时搭建的演示工程,代码写的很差。。。
https://pan.baidu.com/s/1c1I9FpA
阅读全文
0 0
- 【附源码工程】Unity3D 支持代价的A星寻路和优化(二叉堆,寻路节点合并,相邻节点预先存储)
- 访问相邻的兄弟节点
- 二叉树二度节点和叶子节点的数量关系
- 找出二叉搜索树的最大节点和最小节点
- 求一个二叉树中任意两个节点间的最大距离,两个节点的距离的定义是这两个节点间边的个数,比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,
- 二叉树叶节点和
- 交换单向链表的相邻节点
- 交换链表中相邻节点的位置
- 求满二叉树(哈夫曼树)叶子节点和非叶子节点的数目
- 访问相邻兄弟节点
- 相邻节点迭代器
- 二叉树的节点个数和深度(非递归)
- 二叉树的高度和节点数
- 给定一个二叉树和其中的一个节点,求中序遍历这个节点的下一个节点
- 二叉树节点推导既二度节点和叶子节点的数量关系
- (Swift 实现)二叉堆 —— 创建,增加节点,摘除最大节点
- 二叉树(二叉搜索树)上的两节点的公共祖先节点(235和236)
- 链表问题(2)-- 删除聊表的中间节点和a/b处的节点
- 【PHP】修改 配置php.ini上传文件大小的限制
- Linux操作系统基础
- 图的最短路径问题-07-图6 旅游规划
- 通过源码的方式编译hadoop的安装文件
- 线索化二叉树
- 【附源码工程】Unity3D 支持代价的A星寻路和优化(二叉堆,寻路节点合并,相邻节点预先存储)
- HDU 1421
- drawable汇总
- 离散10
- GitHub for Windows简单操作
- 多线程
- 数据库索引
- [leetcode]: 594. Longest Harmonious Subsequence
- 图像语义分割的衡量指标详解