如何以最佳方式将网格(扫雷问题)建模为数据类型?将矢量用作二维实体是否更好。向量的原因是它的边界检查功能。我的假设是对的吗?
谢谢:)
答案 0 :(得分:3)
由于网格大小是(我假设!)固定,因此向量比数组没有什么优势。所以我建议使用2D数组。
虽然没有必要,但您可能会发现在网格边界周围添加sentinel values以消除对隐式边界检查的需要很有用。一个例子是当你对相邻地雷的数量求和时,在网格周围放置0。有关一些更简单的示例,请阅读this article。
答案 1 :(得分:1)
我个人认为,vest选项是使用一个类似于多维数组的专用类,同时为您提供STL向量的好处(可识别大小,不会对指针进行隐式转换等)。 Boost的multi_array类可能是一个很好的候选者,更常见的是每当你需要一个多维数组时。它处理通常与原始C ++数组相关的所有奇怪现象,而不会牺牲性能。
答案 2 :(得分:0)
或者,如果你有一个大部分为空的大网格,你可以使用一个用std :: pair键入的std :: map。如果您更关心内存而不是时间来访问元素,那么只会使用此方法。因为存储器在非空单元O(n)的数量上是线性的,并且访问将是O(log n),其中使用矩阵在存储器中将是O(mp)(其中m和p是你的矩阵维度)和O(1)访问。