BFS廣度優先搜尋 入門

2021-07-24 02:42:07 字數 1077 閱讀 3760

廣度優先搜尋是通過對圖的完全遍歷來達到要求的點的演算法。其對圖的遍歷是如同波浪一樣,每層按照制定的方式一層一層向下搜。 如:

5542552

4234

2344

1411

2675

34在以3為起點進行bfs搜尋,搜尋方式是每次只搜其上下左右的數,找其中比(最開始的)起點小的數。第一次就只會搜尋到

4(上),4(右),1(下),2(左),但是其中只有2和1滿足條件,於是會將2和1作為下一層的起點,然後繼續搜下去,直到不能再搜為止(在圖中有四層,分別由四種顏色表示)。我們通常用佇列來儲存每次需要判斷的起點,一開始3(紅)在佇列中,將3(紅)讀取後,把滿足情況的1,2(綠)加入佇列,依次類推。

由此我們可以將bfs看成是一棵倒著的樹,3(紅)為其根節點;2,1(綠)為其子節點,2,1(藍)又分別為2,1(綠)的子節點,2(粉)為1(藍)的子節點。

我們通過一道例題來了解bfs的具體**:

hrbust 1143 泉水:

題意是讓你找出圖中所有能從起點到達的比起點高度低的地方個數。

#include#include#include#include#includeusing namespace std;

const int max = 1000;

struct pointstart,zhuan,number;

int sum;

int hang,lie;

int gao[max+9][max+9];

int step1[4] = ;

int step2[4] = ;

int bfs(point start) //起始點}}

return sum;

}void init()

}sum = 1;

}int main()

}printf("%d\n",bfs(start));

}return 0;

}

可以看出,在該題中對數的計數只需在每次壓入佇列時,對計數器加一。bfs的優勢在於對有關層數的問題上速度比dfs更快,但是,bfs在層數越高得時候,時間會非常大,就需要進行剪枝操作。

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