Part6.15_완전탐색_깊이,넓이 우선탐색활용_토마토(BFS)

Eugenius1st·2022년 2월 11일
0

Python_algorithm

목록 보기
59/83

토마토

첫번째 익은 토마토가 있는 곳
Q
(1,2) (3,5)

안익은 토마토롤 뻗어 나간다.
pop(0) # (1,2)가 pop된다.
append((1,3))
append((1,1)) ... 상태트리로 뻗는다.

첫번째 익은 토마토가 있는 곳
Q
(3,5) (1,3) (1,1)

안익은 토마토롤 뻗어 나간다.
pop(0) # (3,5)가 pop된다.
append((2,5))
append((0,3))
append((2,3)) ... 상태트리로 뻗는다.

선생님 코드

import sys
sys.stdin = open("input.txt", "rt")
from collections import deque

dx = [-1,0,1,0]
dy = [0,1,0,-1]

n,m = map(int,input().split())
board = [list (map(int,input().split())) for _ in range(m)]
Q = deque()
dis = [[0]*n for _ in range(m)]

for i in range(m):
    for j in range(n):
        if board[i][j] == 1:
            Q.append((i,j))
while Q:
    tmp = Q.popleft()
    for i in range(4):
        xx = tmp[0]+dx[i]
        yy = tmp[1]+dy[i]
        if 0 <= xx < m and 0 <= yy < n and board [xx][yy] == 0:
            board[xx][yy] = 1
            dis[xx][yy]=dis[tmp[0]][tmp[1]]+1
            Q.append((xx, yy))
flag = 1

for i in range(m):
    for j in range(n):
        if board[i][j] == 0:
            flag = 0
result = 0

if flag == 1:
    for i in range(m):
        for j in range(n):
            if board[i][j]> result:
                result = dis[i][j]
    print(result)
else:
    print(-1)
            
profile
최강 프론트엔드 개발자가 되고싶은 안유진 입니다

0개의 댓글