廣度優先搜尋(BFS)

2021-09-22 21:25:19 字數 1355 閱讀 9206

廣度優先搜尋(bfs)

廣度優先搜尋在進一步遍歷圖中頂點之前,先訪問當前頂點的所有鄰接結點。

a .首先選擇乙個頂點作為起始結點,並將其染成灰色,其餘結點為白色。

b. 將起始結點放入佇列中。

c. 從佇列首部選出乙個頂點,並找出所有與之鄰接的結點,將找到的鄰接結點放入佇列尾部,將已訪問過結點塗成黑色,沒訪問過的結點是白色。如果頂點的顏色是灰色,表示已經發現並且放入了佇列,如果頂點的顏色是白色,表示還沒有發現

d. 按照同樣的方法處理佇列中的下乙個結點。

基本就是出隊的頂點變成黑色,在佇列裡的是灰色,還沒入隊的是白色。

用一副圖來表達這個流程如下:

1.初始狀態,從頂點1開始,佇列=

2.訪問1的鄰接頂點,1出隊變黑,2,3入隊,佇列=

3.訪問2的鄰接結點,2出隊,4入隊,佇列=

4.訪問3的鄰接結點,3出隊,佇列=

5.訪問4的鄰接結點,4出隊,佇列=

從頂點1開始進行廣度優先搜尋:

初始狀態,從頂點1開始,佇列=

訪問1的鄰接頂點,1出隊變黑,2,3入隊,佇列=

訪問2的鄰接結點,2出隊,4入隊,佇列=

訪問3的鄰接結點,3出隊,佇列=

訪問4的鄰接結點,4出隊,佇列=

結點5對於1來說不可達。

上面的圖可以通過如下鄰接矩陣表示:

int maze[5][5] = ,,,

,};

bfs核心**如下:

#include #include #define n 5

using namespace std;

int maze[n][n] = ,,,

,};int visited[n + 1] = ;

void bfs(int start)}}

}int main()

return 0;

}

BFS廣度優先搜尋

廣度優先搜尋,利用佇列實現,結束標誌是隊列為空的時候 承接dfs的演算法實現的講例,對於迷宮問題我們也可以採取廣度優先搜尋實現 include iostream include cstdio include cstdlib using namespace std int map 55 55 int ...

bfs廣度優先搜尋

這一課我們來學習圖的另一種遍歷方法 廣度優先搜尋 breadth first search,簡稱 bfs 這是一種連通圖的常用遍歷策略,通常用於求起點到各點的最短路徑,以及求兩點之間的最優路徑等問題。首先我們先來看看廣度優先搜尋的具體方法吧 對於乙個連通圖,我們假設一開始所有頂點均未被訪問,廣度優先...

廣度優先搜尋bfs

bfs即廣度優先搜尋演算法,其是搜尋演算法中的一種。1.dfs常用於尋找是否存在解 其從a節點出發,選取乙個臨近點b,然後不斷深入,在搜尋完b的下屬節點 ehif 後,回到a再搜尋臨近a的c節點,以此類推。2.bfs則用於在最短的時間或最少的移動距離內找到解 其往往從a節點出發,搜尋周圍所有的圍繞節...