假设我们有一个2D网格,其中包含颜色,如字符串“ r”,“ g”和“ b”。我们必须使用颜色目标在r行c列执行洪水填充操作。众所周知,Floodfill操作应该替换所有都连接到grid [r,c](上/右/下/左)且颜色与grid [r,c]相同且与目标相同的元素。
所以,如果输入像
[R | [R | [R |
[R | G | 乙 |
G | 乙 | 乙 |
那么输出将是
G | G | G |
G | G | 乙 |
G | 乙 | 乙 |
因为连接到grid [0,0]的红色单元格被替换为绿色(“ g”)。
为了解决这个问题,我们将遵循以下步骤-
定义一个新的集合
oldcolor:=矩阵[r,c]
定义一个功能dfs()
。这需要我,j
如果i和j在矩阵中,并且(i,j)看不到并且matrix [i,j]与oldcolor相同,则
相加(i,j)
矩阵[i,j]:=目标
dfs(i + 1,j)
dfs(i,j + 1)
dfs(i,j-1)
dfs(i-1,j
从主要方法中,执行以下操作-
dfs(r,c)
返回矩阵
让我们看下面的实现以更好地理解-
class Solution: def solve(self, matrix, r, c, target): def dfs(i, j): if ( i >= 0 and i < len(matrix) and j >= 0 and j < len(matrix[0]) and (i, j) not in seen and matrix[i][j] == oldcolor ): seen.add((i, j)) matrix[i][j] = target dfs(i + 1, j) dfs(i, j + 1) dfs(i, j - 1) dfs(i - 1, j) seen = set() oldcolor = matrix[r][c] dfs(r, c) return matrix ob = Solution()matrix = [ ["r", "r", "r"], ["r", "g", "b"], ["g", "b", "b"] ] r = 0 c = 0 target = "g" print(ob.solve(matrix, r, c, target))
matrix = [ ["r", "r", "r"], ["r", "g", "b"], ["g", "b", "b"] ] r = 0 c = 0 target = "g"
输出结果
[ ['g', 'g', 'g'], ['g', 'g', 'b'], ['g', 'b', 'b']]