그리드의 오른쪽 아래에서 시작하여 뒤로 (0, 0)까지 거슬러 올라가면 프로그램이 매우 간단합니다. 로직을 단계별로 살펴 보겠습니다.
사례 (2, 7)에서 오른쪽 아래부터 시작해 보겠습니다. 그리고 당신은 당신의 경우 (0, 3)보다 더 큰 모든 것을 채워야합니다. 이것들은 재귀 적 메소드에 필요한 파라미터들이다.
recur_fill(input_list, a, b, i, j)
경계 조건으로 시작합니다. 프로그램은 좌표가 0보다 큰 경우에만 실행해야합니다. 즉 i < 0
또는 j < 0
인 경우 중지해야합니다.
if i < 0 or j < 0:
return
지금, 우리는 페인트 경계를 돌봐 즉 A와 B가 필요합니다이에 변환합니다. 우리의 좌표가 경계보다 크면 셀이 -
인지 확인하고 @
으로 채워야합니다.
if i >= a and j >= b:
if input_list[i][j] == '-':
input_list[i][j] = '@'
지금, 우리는 우리의 조건 내에있는 모든 세포가 가득 때까지 반복적으로 세포를 작성해야합니다 : 어느로 변환합니다. 즉,
recur_fill(input_list, a, b, i - 1, j)
recur_fill(input_list, a, b, i, j - 1)
다음을 요약하면, 우리는이 :
from pprint import pprint
def recur_fill(input_list, a, b, i, j):
if i < 0 or j < 0:
return
if i >= a and j >= b:
if input_list[i][j] == '-':
input_list[i][j] = '@'
recur_fill(input_list, a, b, i - 1, j)
recur_fill(input_list, a, b, i, j - 1)
def main():
input_list = [['I', '-', 'I', '-', 'I', '-', '-', '-' ],
['I', 'I', '-', '-', '-', '-', '-', '-' ],
['I', 'I', 'I', 'I', '-', '-', '-', '-' ]]
recur_fill(input_list, 0, 2, 2, 7)
pprint(input_list)
if __name__ == '__main__':
main()
당신이 – imran
은 [Paintcan] 참조 시도 것을 우리에게 보여주십시오 (http://www.youtube.com/ watch? v = BmLTzeuB_h8). – unutbu
힌트 : floodfill하려면 : 현재 셀을 채운 다음 열려있는 셀을 왼쪽, 오른쪽, 위 및 아래로 채 웁니다. –