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

时间:2013-01-29 08:54:42

标签: c++ data-structures

假设我有多个NxN网格,我想根据一些命令操纵它们中的特定位置。在C ++中我可以采用哪些最有效的方法?

为了使事情更清楚,请考虑我有以下文件:

world.txt:

2 O O
O O O
X O X
-----
X O X
O O O
1 O O

代表两个3x3网格。另外,为了清楚起见(但实际上并不重要),我的任务是实现一个算法,该算法打印从1到2获取的位置(使用任何路径)。在C ++中存储此类数据并根据某些规则对各个位置执行操作的最有效方法是什么?哪些数据结构能够处理具有此形式的数据?

1 个答案:

答案 0 :(得分:0)

对于空间效率或访问速度(或其他任何东西),你不会打败2D阵列。更复杂的结构会给你一个更直观的问题表现,代价是空间或速度。

通过举例说明,考虑将网格表示为图形,每个节点(顶点)都有一个指向其邻居的指针(边)列表。在此表示中,您可以将问题转换为图形问题,并以更容易概念化的方式执行操作(例如,Dijkstra最短路径搜索),因为表示明确是图形。将其作为2D阵列,您可以以某种复杂性为代价获得存储效率,因为您必须明确编码邻接规则(角上的节点有2个邻居,边3上的节点等)和程序逻辑中的图形遍历规则。


对于像这样简单的东西,我会坚持使用数组。但这完全是个人偏好。我可以看到,如果你想要更具说明性的东西,图形表示会更好。 (另外,它可以更好地概括为任意配置。)