使用Python中的Floodfill操作填充颜色的程序

假设我们有一个2D网格,其中包含颜色,如字符串“ r”,“ g”和“ b”。我们必须使用颜色目标在r行c列执行洪水填充操作。众所周知,Floodfill操作应该替换所有都连接到grid [r,c](上/右/下/左)且颜色与grid [r,c]相同且与目标相同的元素。

所以,如果输入像

[R[R[R
[RG
G

那么输出将是

GGG
GG
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']]
猜你喜欢