Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 floodfill 작업을 사용하여 색상을 채우는 프로그램

<시간/>

색상을 문자열 "r", "g" 및 "b"로 포함하는 2D 그리드가 있다고 가정합니다. 색상 타겟으로 r행, c열에서 플러드필 작업을 수행해야 합니다. 우리가 알고 있듯이 Floodfill 작업은 grid[r,c](up/right/down/left)에 연결되고 grid[r,c]와 같은 색상을 target과 같은 색상으로 모두 교체해야 합니다.

따라서 입력이 다음과 같으면

R R R
R

그러면 출력은

G

grid[0,0]에 연결된 빨간색 셀이 녹색("g")으로 대체되기 때문입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 새로운 세트 정의
  • oldcolor :=행렬[r, c]
  • dfs() 함수를 정의합니다. i, 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']]