トマト


質問する



コード#コード#

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成熟と表し、mx値を求めて秒数を求める.最初はmax(tmt)でやったけどダメな理由はmax(tmt)だからでは.
だからどうせforは1つの回転の下で一緒にmx値を求めた.
最後のifは、熟成して秒数(-1)を出力できないかどうかを決定する四半期です.