在 C++ 中存储网格状结构的一些最有效的方法是什么?
What are some of the most efficient ways to store a grid-like structure in c++?
>假设我有多个NxN网格,我想根据一些命令操作其中的特定位置。 在C++中,我可以这样做的一些最有效的方法是什么?
为了使事情更清楚,请考虑我有以下文件:
世界.txt:
2 O O
O O O
X O X
-----
X O X
O O O
1 O O
它表示两个 3x3 网格。 还假设,为了清楚起见(但这并不重要),我的任务是实现一种算法,该算法打印从 1 到 2 的位置(使用任何路线)。 将此类数据存储在C++并根据某些规则对各个位置进行操作的最有效方法是什么? 哪些数据结构擅长处理具有这种形式的数据?
对于空间效率或访问速度(或几乎其他任何东西),您不会击败2D阵列。 更复杂的结构会给你一个更直观的问题表示,但代价是一些空间或速度。
为了说明这一点,请考虑将网格表示为图形,每个节点(顶点)都有一个指向其邻居的指针(边)列表。 在此表示中,您可以将问题转换为图问题,并以更容易概念化的方式执行操作(例如,Dijkstra 最短路径搜索),因为表示显式为图。 将其保留为 2D 数组,您可以以一些复杂性为代价获得存储效率,因为您必须显式编码邻接规则(拐角上的节点有 2 个邻居,边缘上的节点有 3 个,依此类推)并在程序逻辑中绘制遍历规则。
对于像这样简单的事情,我会坚持使用数组。 但这完全是个人喜好。 我可以看到,如果你想要一些更说明性的东西,图形表示会更好。 (此外,它可以更好地推广到任意配置。
相关文章:
- 在C++中初始化向量映射的最有效方法
- 将此布尔值传递给此函数的最有效方法是什么?
- 比较C++变量的最有效方法
- 在 c++ 中解决段树以外的范围查询的有效方法是什么?
- 存储变量的更有效方法是什么?
- 确保套装新鲜度的有效方法
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- 映射唯一值和重复值的有效方法.可以访问键或值的位置
- 在C++事务之间存储大量字符数据的有效方法
- 在unordered_multimap中精确迭代一次每个键的有效方法
- 一种将 Dart 中的字节数据转换为 C++ 中的无符号字符*的有效方法?
- 检查两个向量是否并行的最有效方法
- 从浮点数中删除小数部分但保留类型的有效方法
- 传递非泛型函数的最有效方法是什么?
- 按升序打印矢量的所有元素直到它为空而没有重复项的最有效方法是什么?
- 创建字符串数组的有效方法
- 返回一个引用C++中另一个类对象的对象的有效方法
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- 将一种数据类型的向量复制到同一数据类型的结构向量中的有效方法是什么
- 从std::map值中获取密钥的有效方法