題解
用二分搜尋法搜尋答案,每次搜尋都跑一個BFS。n最大才300,所以不會TLE。
Python 解答
from collections import deque
directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]
def bfs(n, a, k):
INF = float('inf')
mat = [[INF] * n for _ in range(n)]
mat[0][0] = 0
que = deque([(0, 0)])
while que:
i, j = que.popleft()
for di, dj in directions:
ni, nj = i + di, j + dj
if 0<=ni<n and 0<=nj<n and abs(a[i][j]-a[ni][nj])<=k and mat[ni][nj]==INF:
mat[ni][nj] = mat[i][j]+1
que.append((ni, nj))
return mat[n-1][n-1]
def binary(n, a):
l, r = -1, 1000000
while r - l > 1:
mid = (l+r) // 2
if bfs(n, a, mid) < float('inf'):
r = mid
else:
l = mid
return r, bfs(n, a, r)
n = int(input())
a = []
for i in range(n):
row = list(map(int, input().split()))
a.append(row)
k, steps = binary(n, a)
print(k)
print(steps)