BFS 廣度優先搜尋法

2021-09-26 01:52:02 字數 1677 閱讀 1376

bfs的基本思想是:

首先訪問初始點v並將其標誌為已經訪問。接著通過鄰接關係將鄰接點入隊。然後每訪問過乙個頂點則出隊。按照順序,訪問每乙個頂點的所有未被訪問過的頂點直到所有的頂點均被訪問過。

廣度優先遍歷類似與層次遍歷。其特點是盡可能先對橫向進行搜尋,從指的出發點,按照該點的路徑長度由短到長的順序訪問圖中各頂點。

利用佇列先進先出的性質,從起點開始,將一步能到達的點全部存入佇列,然後將佇列中隊首元素出隊,執行與起點相同的操作,以此迴圈,直到到達終點或者隊列為空,隊列為空說明可以到達的點都已經遍歷過了,也就是說沒有路可以到達終點。

利用佇列先進先出的性質,從起點開始,將一步能到達的點全部存入佇列,然後將佇列中隊首元素出隊,執行與起點相同的操作,以此迴圈,直到到達終點或者隊列為空,隊列為空說明可以到達的點都已經遍歷過了,也就是說沒有路可以到達終點。

基本思想如下:

void bfs()

//判斷是否是終點

for(int i=0; i<4; i++)}}}

bfs模擬示意圖:

下面放一道可以bfs的例題(hdu 1312):

這間長方形客房鋪有方形瓷磚。每個瓷磚都是紅色或黑色。乙個男人站在黑色的瓷磚上。從瓷磚中,他可以移動到四個相鄰瓷磚中的乙個。但他不能在紅瓦上移動,他只能在黑色瓷磚上移動。

編寫乙個程式,通過重複上述動作來計算他可以達到的黑色瓷磚的數量。

輸入

輸入由多個資料集組成。資料集以包含兩個正整數w和h的行開始; w和h分別是x和y方向上的瓦片數量。w和h不超過20. 

資料集中還有h行,每行包含w個字元。每個字元代表乙個圖塊的顏色,如下所示。

'' - 黑色瓷磚

'#' - 紅色瓷磚

'@' - 黑色瓷磚上的男人(在資料集中只顯示一次)

輸出

對於每個資料集,您的程式應輸出一行,其中包含他可以從初始圖塊(包括其自身)到達的圖塊數量。 

樣本輸入

6 911 9

11 6

7 70 0

樣本輸出

45

59 6

13******~

#includeusing namespace std;

int dx[4]=; //定義上下左右四個方向

int dy[4]=;

int bj[25][25],ans,n,m; //bj標記是否走過,ans存答案

char zb[25][25]; //座標對應的字元

struct node;

void bfs(int x,int y)

} }}int main()

bfs(x,y); //開始搜

cout奇特的碼風~菜雞的世界沒有煩惱,去吃飯~

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節點出發,搜尋周圍所有的圍繞節...