如何计算二维数组中相同单元的组?

时间:2012-10-15 18:50:30

标签: arrays algorithm

这是一个例子(计算黑色):

输入:

enter image description here

输出:

5 4 // 5 groups (4 squares each)
1 1 // 1 group containing 1 square

对于现在,我想不出什么比迭代的痛苦更好。是否有可能以递归的方式获得这些组? 感谢

3 个答案:

答案 0 :(得分:2)

将所有黑色方块设置为节点。黑色方块之间的连接(如果方块彼此相邻)将是边缘。

这会为您提供graph

图表中的DFS会为您提供所有组。请注意,DFS本质上是递归的。

答案 1 :(得分:0)

一开始,每个单元格都是“未访问的”。

我会遍历细胞,直到你遇到一个“未访问的”黑色细胞。你达到那个点的每个白细胞

一旦击中黑色单元格,如果可能,将其“展开”到所有方向(类似于“floodfilling”)。您可以尽可能地扩展并将所有访问的单元格标记为“已访问”。在你这样做之后,你会计算出你感染了多少黑细胞,你知道这个组有多大。检测到该组后,您将继续查看下一个“未访问的”黑色单元格。

答案 2 :(得分:0)

您可以使用具有4连接性的connected component labeling算法