from collections import dequefrom sys import stdind=[[0,1],[0,-1],[1,0],[-1,0]]#四個方向def bfs(high):p=[[True]*n for _ in range(n)]#是否經過二維陣列tasks=deque([(0,0,0)])p[0][0]=Falsewhile tasks:#BFSx,y,dp=tasks.popleft()if x==n-1 and y==n-1:return dp#到達終點 回傳距離 直接離開 (第一次回傳距離會是最短的)for i in range(4):nx=x+d[i][0]#新位置ny=y+d[i][1]#新位置if n>nx>=0 and n>ny>=0:#是否超過範圍if abs(a[nx][ny]-a[x][y])<=high and p[nx][ny]:#高度差是否超過 且 沒走過p[nx][ny]=Falsetasks.append((nx,ny,dp+1))return Falsen=int(stdin.readline())a=[list(map(int,stdin.readline().split())) for _ in range(n)]#地圖l=0r=1000000while r>=l:#二分搜高度差mid=(l+r)//2if bfs(mid):r=mid-1#如果最大高度差mid可以到達終點else:l=mid+1print(l)#最低高度print(bfs(l))#獲得最短路徑
我把二分搜改成DFS
再把r=1000000改成