【问题标题】:How to count groups of same cells in a 2d array?如何计算二维数组中相同单元格的组?
【发布时间】:2012-10-15 18:50:29
【问题描述】:

这是示例(计算黑色):

输入:

输出:

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

目前,我想不出比痛苦的迭代更好的方法了。是否有可能以递归方式获得这些组? 谢谢

【问题讨论】:

  • 什么算作“组”?矩形?连续的黑色区域?
  • 好吧,图片是一个二维数组输入,一组黑色区域是相邻的黑色方块块(对角线不计算在内)
  • 您的目标没有明确定义...这些必须是正方形吗?如果正方形重叠会发生什么?
  • 你如何表示这个网格?你用数组吗?

标签: arrays algorithm


【解决方案1】:

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

这会给你一个graph

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

【讨论】:

    【解决方案2】:

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

    我会遍历单元格,直到遇到“未访问”的黑色单元格。到目前为止,您击中的每个白色单元格

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

    【讨论】:

      【解决方案3】:

      您可以将算法用于connected component labeling 与 4 连接

      【讨论】:

        猜你喜欢
        • 2021-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-28
        • 1970-01-01
        • 2020-04-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多