0

假设我有多个 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++ 中存储此类数据并根据某些规则对各个位置进行操作的最有效方法是什么?哪些数据结构擅长处理具有这种形式的数据?

4

1 回答 1

0

对于空间效率或访问速度(或几乎其他任何东西),您不会击败 2D 阵列。更复杂的结构可以让您更直观地表示问题,但会牺牲一些空间或速度。

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


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

于 2013-01-29T09:17:53.137 回答