bfs dequeの更新

6466 ワード

次のラウンドでは、アクセスするノードをtemp変数に配置します.
ドアが閉まるとqにtempを加えます.
while True:
    temp = deque([])
    while q:
        x, y, time = q.popleft()
        for k in range(4):
            xx = x + dx[k]
            yy = y + dy[k]
            if 0 <= xx < h and 0 <= yy < w:
                if data[xx][yy] == "." and visited[xx][yy] == 0:
                    continue
                visited[xx][yy] = 1
                temp.append([xx, yy, time + 1])
    if not temp:
        break
    q = temp
while文の終了条件を更新前qの長さに設定
👉 temp変数は必要ありません.⭐⭐
while q:
    qlen = len(q)
    while qlen:
        x, y, time = q.popleft()
        for k in range(4):
            xx = x + dx[k]
            yy = y + dy[k]
            if 0 <= xx < h and 0 <= yy < w:
                if data[xx][yy] == "." and visited[xx][yy] == 0:
                    visited[xx][yy] = 1
                    q.append([xx, yy, time + 1])
        qlen -= 1