Int [] []搜索关节整数

时间:2016-11-20 20:36:12

标签: java arrays int

我有一个结构int[][],大小固定。它充满了自然数。一个例子:

  

0 0 0 0 0 0 0
  1 2 6 9 0 3 4
  3 1 3 4 5 6 0
  1 2 3 0 2 1 1
  1 2 0 0 0 1 0

我的目标是检查我所拥有的这个结构中有多少个'圆圈'。在这个例子中答案应该是4.
修改
圆是包含所有关节零的结构。这是什么意思?这些是从零上升,下降,左或右可以到达的零(不考虑对角线)。
示例解决方案:
第一圈:

  

0 0 0 0 0 0 0
  1 2 6 9 0 3 4
  3 1 3 4 5 6 0
  1 2 3 0 2 1 1
  1 2 0 0 0 1 0

第二个:

  

0 0 0 0 0 0 0
  1 2 6 9 0 3 4
  3 1 3 4 5 6 0
  1 2 3 0 2 1 1
  1 2 0 0 0 1 0

第三个:

  

0 0 0 0 0 0 0
  1 2 6 9 0 3 4
  3 1 3 4 5 6 0
  1 2 3 0 2 1 1   1 2 0 0 0 1 0

第四个:

  

0 0 0 0 0 0 0
  1 2 6 9 0 3 4
  3 1 3 4 5 6 0
  1 2 3 0 2 1 1
  1 2 0 0 0 1 0

2 个答案:

答案 0 :(得分:2)

示例算法相当简单。

  1. 之前未经检查的地点开始。
  2. 找到一个零以及相邻的零。
  3. 将找到的零值更改为1. [如flood-fill]
  4. 递增计数器。
  5. 如果不是所有的位置都检查到2。
  6. else:报告结果。
  7. 您可能需要查看的内容是Flood填充。像这里:

    https://en.wikipedia.org/wiki/Flood_fill

    或者 - 更有趣。

    定义一个类,它是一组像素[x,y]

    1. 找到所有单独的零位置[x,y]
    2. 让每个人零成为个人"圈"
    3. 将相邻的圈子合并为更大的圈子"
    4. 继续合并(3-4)没有进展。
    5. 报告结果。
    6. 在这种情况下,正确的分类将是关键因素 您将需要检查两个圆是否相邻的功能 它提供了更多乐趣!

答案 1 :(得分:0)

我认为你需要的是blob detector,一种图像处理算法,可以找到共享属性的相邻像素(如灰度值)。 OpenCV有一个内置的blob detector。可以找到有关用法的教程here

您也可以查看connected component labeling。您可以从给定的伪代码(您打算避免使用外部库)实现它,并且它不包含递归(您对Vito的回答的评论)。