from collections import deque
import sys
input = sys.stdin.readline
M, N = map(int, input().split())
tmt = [list(map(int, input().split())) for _ in range(N)]
dir = [(-1,0), (1,0), (0,-1), (0,1)]
q = deque()
for i in range(N):
for j in range(M):
if tmt[i][j] == 1:
q.append((i, j))
while q:
i, j = q.popleft()
for k in range(4):
ni, nj = i+dir[k][0], j+dir[k][1]
if 0<=ni<N and 0<=nj<M and tmt[ni][nj] == 0:
tmt[ni][nj] = tmt[i][j] + 1
q.append((ni,nj))
is_ripe = True
mx = 0
for i in tmt:
if 0 in i:
is_ripe = False
break
if mx < max(i):
mx = max(i)
if is_ripe:
print(mx-1)
else:
print(-1)
코드가 이렇게 길어도 되는건가...
줄이고싶은데 실력이 안된다... 아직 최단거리 문제가 이해가 완벽히 되지 않은듯. 아무튼 전에 풀었던 것과 같이 최단거리(시간초)로 해서 토마토 들어있는 칸을 지날때마다 작성해준다.
그리고 bfs를 다 돌았는데도 0이 있으면 토마토가 다 익지 않았다는 뜻이므로 -1 을 출력해주기 위해서 bfs밑에 for문을 돌았음. 익지 않은것을 is_ripe로 True/False 나타냈고, 초 수를 구하기 위해서 mx값을 구했다. 처음에는 max(max(tmt))로 했었는데 이게 안되는 이유는 max(tmt)이기 때문에.. 한줄의 값의 합이 제일 큰걸로 계산되어서 그럼
그래서 어차피 for하나 도는거 밑에 mx값도 같이 구해주었다
마지막 if는 다 익었는지 여부를 확인해 초수를 출력할 지 못구했다는 것(-1)을 출력할지 정하는 분기이다