用于存储平铺贴图节点的最佳容器
Best container for storing tile map nodes?
我正在编程一个等轴测2D场景,其中我必须使用A*路径查找。最好是用一个向量来存储所有的瓦片节点(每次我请求"西-南相邻节点"时,都会计算它,并用一些数学方法检查它是否存在),还是我直接用指向9个相邻节点的指针来准备所有节点,如果它是一个界,则将其归零?这个选项有点消耗内存,但它值吗?
存储平铺映射节点的最佳方式是什么?通常是std::vector、std::list、custom?
使用网格映射,(一维)数组/向量可以完成任务。计算/检查邻居的"数学"非常简单。
您可以在地图周围添加"假"瓷砖,以简化/优化检查。
因此,对于3x3地图,您可以构建一个边界上具有不可通行瓷砖的5x5地图。
XXXXX
X...X
X...X
X...X
XXXXX
北/南:指数+/-5
东/西:索引+/-1
我建议使用您给出的每个节点存储9个指针的选项,每个指针指向一个邻居。除非你有大量的节点,否则在今天的硬件上,内存使用率将可以忽略不计,如果你可以轻松地将邻居返回到节点,而不是搜索你必须找到的每个节点,那么寻路会更快。
简而言之,内存使用率不会达到那么高,并且寻路速度会比其他方案更快。
相关文章:
- 反向给定链表中的K节点
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- Boost Graph Library,修复节点大小
- 在c代码之间共享数据的最佳方式
- 使用std::source_location报告错误的最佳实践
- C++A*算法并不总是在路径中具有目标节点
- 如何找到2个单链表的公共节点
- 派生类销毁的最佳实践是什么
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 将寄存器设计成可由C和C++访问的外设的最佳实践
- 为什么我的删除节点函数实际上没有删除节点?
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 比较两个节点坐标的最佳方法是什么?
- 从基于矢量的二叉搜索树中删除节点的最佳方法
- 在图算法中,确定是否访问节点的最佳方法是什么?
- 用于存储平铺贴图节点的最佳容器
- 保存图节点的最佳方式