【问题标题】:Flood Fill Algorithm - number of Empty Area洪水填充算法 - 空白区域的数量
【发布时间】:2013-11-16 13:54:53
【问题描述】:

所以我一直在尝试使用 2D 数组来实现洪水填充算法。我已成功填充数组,但我想知道是否有任何方法可以计算未绘制区域的数量。只需要一个关于如何做到这一点的想法,而不是要求任何代码 sn-p。

输入:

输出:

【问题讨论】:

  • 你的意思是,在填充之后有多少个单独的区域(你的图片上是 4 个)?如果是这样,则对每个未绘制的像素再次进行填充,并计算调用次数。
  • 不确定反转结果是否也可以接受。形状是空心的吗?
  • @MaciejStachowski 是的,4 个单独的区域。我这样做了,但它给了我未绘制的点数(因为我在每个像素上调用 FloodFill)。我需要知道封闭区域的数量(在我的情况下是 4 个)
  • 另外,请尝试添加更好的屏幕截图。在您的示例中,右上角的形状没有关闭,因此如果洪水来自四面八方,它也应该被填充。结果中左下方的形状也被裁剪了一点。
  • @MarkusUnterwaditzer,是的,它们是空心的,对屏幕感到抱歉。

标签: algorithm flood-fill


【解决方案1】:

i = 0

  1. 随机选取未填充的点,i加1

  2. 从那里填充,但颜色不同

  3. 重复直到没有点为止

i 是组的数量。

您可能希望首先创建一组未填充的点并在第 1 步和第 2 步中删除点,以避免通过二维阵列进行线性扫描以寻找新的未填充点。

【讨论】:

  • 谢谢,会尝试回复你:)
  • 如果您只需要组的数量,您可能可以为所有内容使用一种颜色。生成的图像将无法使用。
【解决方案2】:

算法:-

  1. 从未填充点开始,然后从该点开始填充。

  2. 计算所有填充点,直到填充结束

  3. 计数是你封闭图形的面积。

【讨论】:

  • 好的,但是你能告诉我如何计算区域的数量吗?我可以通过计数来获得该区域。
  • 所有区域都将首先调用floodfill :)
  • 我在 main 中使用了一次对 FloodFill 的调用,然后进行了递归调用。如何检测是否有第一个电话,对不起,如果我听起来太天真了。
  • 在肯定超出封闭区域的点上调用 Floodfill。然后使用平面扫描对尚未填充的点进行调用。不包括您填充未封闭区域的第一个呼叫的总数是您的封闭区域。
  • @Avinash: void floodfill(...) { counter++; actualFloodFill(...); }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
  • 2014-02-16
  • 1970-01-01
  • 1970-01-01
  • 2011-07-10
相关资源
最近更新 更多