如何有效地存储航点

时间:2013-01-11 08:15:55

标签: c++ mysql path-finding

我有一个非常大的地图游戏,我需要存储一个很多的航点(数百万,如果不是数十亿),然后使用它们进行使用A *算法进行寻路。

我需要什么:

  1. 存储大量存储的有效方式
  2. 直接为A *算法访问它们的快捷方式。
  3. 起初我想使用一个简单的向量,但这会很快使用所有可用的内存。 然后我认为我应该使用mysql,这可能是一个好主意,因为我可以在数据库中查询航点的区域。

    最大的问题是,对于A *我需要尽可能快地访问航点,所以我可能需要每个航点的唯一ID。

    实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

我认为你应该考虑通过自己管理记忆来略微降低水平 - 明确地为图表的每个节点调用newdelete;并通过内存地址引用您的节点。如果您担心分配大量的小内存,可以考虑使用tcmalloc库。

节点应包含邻接列表。如果图是静态的,我建议将邻接存储在每个节点中动态创建的数组中,该数据大小与邻居的数量完全匹配。如果邻居的数量可以随时间变化,std::vector可能是下一个最好的事情。


注意:我认为图表不规则。对于常规图形(例如Potatoswatter指出的网格),可以隐式学习节点的位置。