我是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”。
"b"
"a"
例如,假设用户决定了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上查看洪水填充示例,但它们似乎不适合我的情况。至少我无法将这些示例应用于我的代码。洪水填充似乎不是这里的热门话题…但是,再次感谢您的帮助!
好吧,洪水填充的想法是:
类似于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)