from collections import deque
from copy import deepcopy
n = int(input(""))
c = {}
nums = []
data = [[-1]*(n+2)]
for i in range(n):
b = list(map(int,input("").split()))
data.append([-1]+b+[-1])
nums.extend(b)
data.append([-1]*(n+2))
direct = [[-1,0],[0,1],[1,0],[0,-1]]
def BFS(r):
wait = deque([[1,1]])
wait2 = []
arr = deepcopy(data)
print(f"arr {arr}")
print(data)
step = 0
while len(wait) != 0:
print(wait)
for i in range(len(arr)):
print(arr[i])
print("--------------")
for i in range(len(wait)):
for j in range(4):
a = arr[wait[0][0]+direct[j][0]][wait[0][1]+direct[j][1]]
if (a != -1) and (type(a) != str):
if abs(a-int(arr[wait[0][0]][wait[0][1]])) <= r:
wait2.append([wait[0][0]+direct[j][0],wait[0][1]+direct[j][1]])
arr[wait[0][0]+direct[j][0]][wait[0][1]+direct[j][1]] = str(arr[wait[0][0]+direct[j][0]][wait[0][1]+direct[j][1]])
arr[wait[0][0]][wait[0][1]] = -1
wait.popleft()
step += 1
wait = deque(wait2)
wait2.clear()
if [n,n] in wait:
return step
return 0
low = 1
high = max(nums)-min(nums)
while low <= high:
mid = (low+high)//2
get = BFS(mid)
print(f"mid {mid}")
print(f"get {get}")
c[mid] = get
answer = mid
if get == 0:
low = mid+1
else:
high = mid-1
print(answer)
print(c[answer])
我是用二分搜找最大高度差的最小值,並把他帶入函數裡BFS出最小路徑,或沒有路徑。我改過BFS的回傳的地方,改成return step +1也沒用,所以我覺得是整個while迴圈都少跑了一次。另外題目給的兩筆測資都正常通過。
請問有沒有人可以幫我看一下是哪裡出問題了,謝謝。