我有一个结构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
答案 0 :(得分:2)
示例算法相当简单。
您可能需要查看的内容是Flood填充。像这里:
https://en.wikipedia.org/wiki/Flood_fill
或者 - 更有趣。
定义一个圆类,它是一组像素[x,y]
在这种情况下,正确的分类将是关键因素 您将需要检查两个圆是否相邻的功能 它提供了更多乐趣!
答案 1 :(得分:0)
我认为你需要的是blob detector,一种图像处理算法,可以找到共享属性的相邻像素(如灰度值)。 OpenCV有一个内置的blob detector。可以找到有关用法的教程here。
您也可以查看connected component labeling。您可以从给定的伪代码(您打算避免使用外部库)实现它,并且它不包含递归(您对Vito的回答的评论)。