Python中使用泛洪填充操作填充顏色的程式


假設我們有一個二維網格,其中包含顏色字串“r”、“g”和“b”。我們必須在行r、列c處使用顏色target執行泛洪填充操作。眾所周知,泛洪填充操作應將與grid[r,c]連線(上/右/下/左)且顏色與grid[r,c]相同的元素替換為與target相同的顏色。

因此,如果輸入如下所示:

RRR
RGB
GBB

那麼輸出將是

GGG
GGB
GBB

因為與grid[0,0]連線的紅色單元格被替換為綠色(“g”)。

為了解決這個問題,我們將遵循以下步驟:

  • 定義一個新的集合seen
  • oldcolor := matrix[r, c]
  • 定義一個函式dfs()。這將需要i, j
  • 如果i和j在矩陣中,並且(i, j)未被seen,並且matrix[i, j]與oldcolor相同,則
    • 將(i, j)新增到seen
    • matrix[i, j] := target
    • dfs(i + 1, j)
    • dfs(i, j + 1)
    • dfs(i, j - 1)
    • dfs(i - 1, j)
  • 在主方法中,執行以下操作:
  • dfs(r, c)
  • return matrix

讓我們看看下面的實現,以便更好地理解:

示例

 線上演示

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']]

更新於:2020年10月20日

220 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.