在 C++ 中存储网格状结构的一些最有效的方法是什么?

What are some of the most efficient ways to store a grid-like structure in c++?

本文关键字:有效 方法 是什么 存储 网格 结构 C++      更新时间:2023-10-16

>假设我有多个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 个,依此类推)并在程序逻辑中绘制遍历规则。


对于像这样简单的事情,我会坚持使用数组。 但这完全是个人喜好。 我可以看到,如果你想要一些更说明性的东西,图形表示会更好。 (此外,它可以更好地推广到任意配置。