AcWing 728. 变身程序员
原题链接
中等
作者:
Myang
,
2025-04-04 21:57:54
· 广东
,
所有人可见
,
阅读 3
python 代码
from collections import deque
import sys
mp = []
for line in sys.stdin:
line = line.strip()
if not line:
break
row = list(map(int, line.split()))
mp.append(row)
dx = [1,-1,0,0]
dy = [0,0,1,-1]
n = len(mp)
m = len(mp[0])
time = [[float('inf') for i in range(m)] for j in range(n)]
def bfs():
q = deque()
for i in range(n):
for j in range(m):
if mp[i][j] == 2:
time[i][j] = 0
q.append((i,j))
while q:
t = q.popleft()
for i in range(4):
x = t[0] + dx[i]
y = t[1] + dy[i]
if x < 0 or x >= n or y < 0 or y >= m:
continue
if mp[x][y] == 0:
continue
if mp[x][y] == 2:
if time[x][y] > time[t[0]][t[1]] + 1:
time[x][y] = time[t[0]][t[1]] + 1
q.append((x,y))
continue
mp[x][y] = 2
time[x][y] = time[t[0]][t[1]] + 1
q.append((x,y))
bfs()
res = 0
for i in range(n):
for j in range(m):
if mp[i][j] == 1:
print(-1)
exit()
if mp[i][j] == 0:
continue
res = max(res,time[i][j])
print(res)