#52845: 為甚麼我的答案都和解答差1


linswater (linswater)

學校 : 國立武陵高級中學
編號 : 297974
來源 : [36.224.93.12]
最後登入時間 :
2025-10-05 16:14:00

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迴圈都少跑了一次。另外題目給的兩筆測資都正常通過。
請問有沒有人可以幫我看一下是哪裡出問題了,謝謝。