첫번째 익은 토마토가 있는 곳
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)