為何BFS用queue解決是合理的

2021-10-18 10:53:25 字數 631 閱讀 3136

為何bfs用queue解決是合理的

想象這個問題場景. 由於bfs要求以源節點為中心, 從近到遠訪問所有節點.

我們用遞推證明訪問順序是從近到遠的:

起初, 佇列中只有一枚源節點.

當k=1時, 取出隊首訪問, 標記為不可再訪問, 將其所有鄰居加入佇列. 這樣會把所有距離為1的節點加入, 並標記不可再訪問.

當k=2時, 依次取出佇列所有節點, 對其訪問並標記. 將所有可以訪問的鄰居加入佇列並標記. 在該階段開始時, 有這樣幾個性質:

所有距離0和1的節點都已標記不可再訪問. 這樣之後能加入佇列的節點一定是距離2以上的.

每個距離1的節點都已加入佇列, 都將被訪問, 而每個距離2的節點都與某距離1的節點相連, 因此每個距離2的節點都將被訪問. 佇列中當前只有距離為1的點, 因此遍歷這些點, 只會將距離為2的點加入, 而不會有其它距離的點加入.

由此類推, 可得所有距離的節點都會被訪問, 且會按照距離順序被訪問.

用BFS解決迷宮問題

在乙個n n的矩陣裡走,從原點 0,0 開始走到終點 n 1,n 1 僅僅能上下左右4個方向走。僅僅能在給定的矩陣裡走,求最短步數。n n是01矩陣,0代表該格仔沒有障礙。為1表示有障礙物。int mazearr maxn maxn 表示的是01矩陣 int steparr 4 2 表示上下左右4個...

bfs一種寫法用queue佇列實現

輸入樣例 69.0 0該題用bfs實現我第一次用遞迴實現的bfs實現 如下 include include using namespace std const int n 22 long long sum char mp n n int book n n int net 4 2 int sx,sy ...

BFS迷宮(用佇列解決迷宮問題

提交 狀態 討論版 命題人 如圖所示,迷宮的入口為 1,1 出口為 8,8 用佇列求迷宮 樣例輸出 1 12 1 3 14 1 5 15 2 5 36 3 6 46 5 7 58 5 8 68 7 8 8在看了老師提供的題解後,感覺用指標寫會十分麻煩而且感覺比較亂,就用自己的思路重新做了一下這道題。...