泛洪填充Python
问题内容:
我是Flood
Fill算法的新手。我从Wikipedia(http://en.wikipedia.org/wiki/Flood_fill)中签出了它。但是并没有变得那么明智。我正在尝试在以下情况下使用它。我有一个矩阵:
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"]]
然后让用户从矩阵中确定一个点。如果在给定的点上"b"
什么也没做。在另一种情况下,如果要在给定点处使用洪水填充算法"a"
将给定点以及
所有周围或连接的点"a"
更改为“ c”。
例如,假设用户决定了matrix [0] [0]。那么新矩阵将是:
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 [3] [1]。然后我们将有:
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(matrix,x,y),到目前为止,我已经提出了这一点:
def floodfill(matrix, x, y):
if matrix[y][x] == "b":
return matrix
elif matrix[y][x] == ".":
stack = []
您有办法引导我继续吗?试图在SOF上查看洪水填充示例,但它们似乎不适合我的情况。至少我无法将这些示例应用于我的代码。洪水填充似乎不是这里的热门话题…但是,再次感谢您的帮助!
问题答案:
好吧,洪水填充的想法是:
- 检查该点是否符合条件。
- 如果是的话,将其更改为“ 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)