我对 Flood Fill 算法完全陌生。我从维基百科 ( 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”。
例如,假设用户决定矩阵[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 上的洪水填充示例,但它们似乎不适合我的情况。至少我无法将这些示例应用到我的代码中。洪水填充在这里似乎不是那个受欢迎的主题……但是再次,我们将不胜感激!
原文由 Waldema 发布,翻译遵循 CC BY-SA 4.0 许可协议
嗯,洪水填充的想法是:
类似python的伪代码: