所以。我在 C 语言中工作,我需要一些帮助。我有一个矩阵(数组)(我现在不知道如何正确翻译它 :D )其中只有 0 和 1。例如,一个可能看起来像这样:
1 1 0 0 0 0
1 1 0 1 0 0
1 0 0 0 0 1
0 0 1 1 0 1
0 0 1 0 1 1
现在。我需要从中提取包含 1 的簇。你能给我写一些关于如何处理这个的想法吗?我尝试了一个结构和一个指向它的 ** 指针,该结构包含 2 个元素:x 和 y,x 表示原始矩阵中的 x 坐标,y 表示矩阵中的 y 坐标。然后,对于每个集群,它看起来像:
集群[0][0].x = 0;
集群[0][0].y = 0;
集群[0][1].x = 1;
集群[0][1].y = 0;
集群[0][2].x = 0;
集群[0][2].y = 1;
.. 等等。但是我在迭代方面遇到了一些问题(我有一个 1000*1000 矩阵),我决定问问你是否还有其他想法。谢谢。
编辑:这些是本例中的集群:
1:
1 1 0 0 0 0
1 1 0 0 0 0
1 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
2:
0 0 0 0 0 0
0 0 0 1 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
3:
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 1 1 0 0
0 0 1 0 0 0
4:
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 1
0 0 0 0 0 1
0 0 0 0 1 1
编辑2: 所以。从 1 和 0 的矩阵中,我需要提取所有相邻“1”的组。相邻意味着从它的位置左上或右上相邻。至于第一个集群是由矩阵开头的那 5 个“1”组成的集群。另一个集群是第 2 行第 4 列仅包含一个“1”的集群。我需要以某种方式将每个集群的 x 和 y 坐标存储在某处,因为我稍后需要使用它们。
最佳答案
对于字符串数据,只是一个数组
char map[1000][1000]
这将使用 1 兆字节的内存,这在如今并不多。
我看到的算法是
- 在矩阵中找到一个
1
, - 对其进行填充(例如,将
1
更改为2
或0
) - 然后继续在矩阵中搜索
1
。
返回转换所有1
所需的填充数。
洪水填充是一个众所周知的算法,你应该能够找到合适的例子,或者可能使用图形库。
关于矩阵(数组)的簇,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27858836/