c++ - 随机世界的数据结构

标签 c++ data-structures

所以,我正在考虑制作一个简单的随机世界生成器。该生成器将创建一个起始“单元格”,该“单元格”将具有一到四个随机导出(在主要方向上,类似于迷宫)。在决定这些导出后,我会在每个导出处生成一个新的随机“单元格”,并在玩家接近尚未生成的世界部分时重复。这个概念将允许一个“无限”的世界,所有的世界都是随机生成的;但是,我不确定如何在内部最好地表示这一点。

我正在使用 C++(这并不重要,我可以实现任何类型的必要数据结构)。起初我想到了使用一种有向图,其中每个节点都有指向它周围每个单元格的边,但是如果用户在世界上找到一个点,回溯并返回到那个点,这可能不会很好地工作从另一个方向看。世界可能会做一些奇怪的事情,例如在一个位置生成两个细胞。

关于哪种数据结构可能对这种情况最有效有什么想法吗?还是我对我的随机世界生成做了一些非常愚蠢的事情?

如有任何帮助,我们将不胜感激。 谢谢, 克里斯

最佳答案

我建议您阅读有关图表的内容。这正是随机图生成的一个应用。您描述的不是“cell”和“exit”,而是“node”和“edge”。

此外,您还可以进行最短路径分析、循环检测和各种其他有用的图论应用。

This将帮助您了解节点和边缘:

here是这些概念的最终应用。我以面向对象的方式实现了这一点——每个节点都知道它与其他节点的边。一个流行的替代方法是使用 adjacency list 来实现它.我认为邻接表的概念基本上就是 user470379 在他的回答中所描述的。然而,他的 map 解决方案允许无限图,而传统的邻接表则不允许。我喜欢图论,这是它的完美应用。

祝你好运!

-Brian J. Stianr-

关于c++ - 随机世界的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3999120/

相关文章:

c++ - 使用 STL 列出特定子集

c++ - 默认构造函数创建时间和多个定义

c++ - 如何在 C++ 中的结构中定义 lambda 函数

java - 使用堆栈从算术表达式中删除不必要/重复的括号

c# - System.Data.DataTable 的轻量级替换

c++ - 从一组集合 { {..}, {..}, {..} } 中挑选数字集合 {1,2,3} 使得所有元素都是唯一的

c++ - Unix 中的 MakeFile 错误

c++ - 高效的数据结构,通过查找和插入将整数映射到整数,无分配和固定上限

c - 实现一个数据结构来保存字符流

haskell - 为地下城 map 选择什么数据类型