【发布时间】:2019-01-16 13:51:21
【问题描述】:
我刚刚开始编写一个新项目,它应该读取 X 和 Y 坐标(可以从 0 到 4,000,000,000)并存储这些点。
因为我不知道要存储多少点,所以我必须在程序运行时分配所需的内存。
然后我想找到相邻点(水平和垂直)来创建“岛屿”并将所有连接的点存储在一个组中。
现在我不太确定是哪种数据类型或如何存储坐标。 我的第一个想法是拥有一个 2d array[x][y] 来存储该确切点的状态。因此,如果我在位置数组[5][5] 上,我可以通过添加 x+1 (array[6][5]) 轻松请求下一个点的状态。 问题是我必须初始化一个数组,该数组还包含点,根本没有被占用,我认为 array[4,000,000,000][4,000,000,000] 无论如何都行不通。
那么最好的存储是什么,以便我能够读取点状态,从而找到相邻点?
提前致谢, D
编辑:每个岛也可以有间隙
【问题讨论】:
-
@user3386109 是什么让您无法将那个(非常好,谢谢)链接变成答案?我希望这是为数不多的无代码但主题(在我看来,还没有近距离投票)、问得好、回答得好的问题之一。
-
k-d 树的实现可能有点超出我们的提问者的范围。作为替代方案,无需为整个 4Bx4B 网格定义存储来定义该范围内的点。与其考虑
[x][y]的数组,不如简单地定义一个struct point { uint32_t x, y };那么您只需要为您拥有的点创建一个结构数组并动态分配存储空间。然后,您可以根据每个点的位置计算您的邻居信息。 (您也可以添加任何您需要的state信息) -
或者,也许是一个哈希表?
-
@user3386109 谢谢你,我必须阅读看看这是否适合我的问题。
标签: c arrays algorithm storage allocation