当前位置: 首页 > 知识库问答 >
问题:

Python中的洪水填充

璩和璧
2023-03-14
matrix = [["a", "a", "b", "a", "a", "b"],
          ["a", "b", "b", "a", "b", "b"],
          ["b", "a", "b", "a", "a", "b"],
          ["b", "a", "b", "a", "b", "b"],
          ["a", "a", "b", "a", "a", "a"],
          ["a", "b", "b", "a", "a", "b"]]
matrix = [["c", "c", "b", "a", "a", "b"],
          ["c", "b", "b", "a", "b", "b"],
          ["b", "a", "b", "a", "a", "b"],
          ["b", "a", "b", "a", "b", "b"],
          ["a", "a", "b", "a", "a", "a"],
          ["a", "b", "b", "a", "a", "b"]]
matrix = [["c", "c", "b", "a", "a", "b"],
          ["c", "b", "b", "a", "b", "b"],
          ["b", "c", "b", "a", "a", "b"],
          ["b", "c", "b", "a", "b", "b"],
          ["c", "c", "b", "a", "a", "a"],
          ["c", "b", "b", "a", "a", "b"]]

我试图构建一个函数floodfill(矩阵,x,y),到目前为止,我已经得到了这个:

def floodfill(matrix, x, y):
    if matrix[y][x] == "b":
        return matrix
    elif matrix[y][x] == ".":
        stack = []

你有办法引导我继续下去吗?试着在这里看洪水填充的例子,但他们似乎不适合我的情况。至少我无法将这些示例应用到我的代码中。洪水填充似乎不是这里受欢迎的主题...但是,再次,帮助将非常感谢!

共有1个答案

屠瑞
2023-03-14

好吧,洪水填充的想法是:

  1. 检查点是否符合条件。
  2. 如果是,则将其更改为“C”(在您的示例中)-并对周围的所有单元格调用泛洪填充。

类似Python的伪代码:

def floodfill(matrix, x, y):
    #"hidden" stop clause - not reinvoking for "c" or "b", only for "a".
    if matrix[x][y] == "a":  
        matrix[x][y] = "c" 
        #recursively invoke flood fill on all surrounding cells:
        if x > 0:
            floodfill(matrix,x-1,y)
        if x < len(matrix[y]) - 1:
            floodfill(matrix,x+1,y)
        if y > 0:
            floodfill(matrix,x,y-1)
        if y < len(matrix) - 1:
            floodfill(matrix,x,y+1)
 类似资料:
  • 我正试图制作一个可以在C#中填充int数组的算法。基本上,作为MS Paint中的填充工具,我有一个颜色,如果我在数组中选择(x,y)坐标,它会用新的颜色替换所有初始颜色相同的邻居。 例如: 如果我把3放入(0,0),数组就变成: 所以我在递归中尝试了它,它确实有效,但不是一直有效。实际上,我有时会遇到“堆栈溢出”错误(似乎合适)。这是我的代码,如果你能告诉我哪里出了问题,那就太好了:) 谢了!

  • 我正在用Java开发一个小的绘图应用程序。我试图通过实现洪水填充算法来创建一个“bucket-fill”工具。 (不必是特定于Java的)。 谢谢。

  • 我正在编写一个非常基本的油漆应用程序。 我的应用程序有一个图像,当我触摸任何地方时,这个地方会填充一种颜色。 我使用洪水填充算法(http://en.wikipedia.org/wiki/Flood_fill),特别是第二种替代实现方法。 我使用像素图来更新纹理。 这在我的电脑上运行得很好,问题是在我的android(分辨率为720p的摩托罗拉moto G,android 4.4)上执行应用程序时

  • 本文向大家介绍洪水填充和边界填充算法之间的区别,包括了洪水填充和边界填充算法之间的区别的使用技巧和注意事项,需要的朋友参考一下 在这篇文章中,我们将了解洪水填充算法和边界填充算法之间的区别。它们是区域填充算法,可以根据随机像素是否具有该区域的原始颜色来区分它们。 洪水填充算法 它也被称为种子填充算法。 它针对多维数组计算连接到给定节点的面积。 它通过填充或重新着色内部包含特定颜色的特定区域并因此给

  • 下图代表房间布局。 “#”代表墙。在左边和右边有#的单个空格代表门。连续的空间代表房间面积。 这将作为一个2D数组提供给Java程序。示例输入如下:

  • 传统的交换机(我只对我目前使用的交互机做过测试,按照常识只能这样表述)在数据转发过程中依靠对CAM表的查询来确定正确的转发接口,一旦在查询过程中无法找到相关目的MAC对应的条目,此数据帧将作为广播帧来处理。CAM表的容量有限,只能储存不多的条目,当CAM表记录的MAC地址达到上限后,新的条目将不会添加到CAM表中。 基于以上原理,我们会发现一个非常有趣的现象。某台PC不断发送去往未知目的地的数据帧