如何實現廣度優先遍歷(BFS)

2021-06-26 02:29:49 字數 1040 閱讀 1181

bfs過程:

一:訪問頂點v,並標記v為已經訪問

二:頂點v入佇列

三:如果佇列非空,進行執行,否則演算法結束

四:出佇列取得對頭頂點u,如果頂點未被訪問,就訪問該頂點,並標記該頂點為已經訪問

五:查詢u的第乙個鄰接節點w

六:如果w不存在,則轉到步驟三,否則迴圈執行

a. 如果w沒有被訪問過,則先把w入佇列

b.查詢頂點u的下乙個鄰接節點,記為w,並轉到步驟六

上圖使用bfs訪問順序為:

a bedc

佇列的變化過程如下:ab

beeddc

**如下:

#includeusing namespace std;

#define vertexsize 10

int visit[vertexsize];

//***********************************

#define queuesize 30

typedef struct

rqueue;

rqueue q;

void initiate_queue(rqueue *q)

int queuenotempty(rqueue *q)

int deletequeue(rqueue *q)

//***********************************

typedef struct

graph;

void initiate_graph(graph *g,int n)

}void insertedge(graph *g,int v,int w,int weight,int n)

void dfs(graph *g,int u,int n) }}

void bfs(graph *g,int u,int n)

cout<

BFS廣度優先遍歷

樹的層序遍歷即為bfs的應用。實質就是利用乙個佇列將頂點v的鄰接點儲存,因樹的結構比較特殊,所以不需要進行設定flag訪問位,但圖的情況比較複雜,一般需要對每個結點是否被訪問進行標記。利用bfs可以很容易的利用層數求出最短的步數,比如二叉樹利用層序遍歷求樹的高度,但深搜一般也可以實現。廣度優先搜尋能...

BFS廣度優先搜尋遍歷

廣度優先搜尋遍歷 problem description 給定乙個無向連通圖,頂點編號從0到n 1,用廣度優先搜尋 bfs 遍歷,輸出從某個頂點出發的遍歷序列。同乙個結點的同層鄰接點,節點編號小的優先遍歷 input 輸入第一行為整數n 0 n 100 表示資料的組數。對於每組資料,第一行是三個整數...

廣度優先搜尋 BFS遍歷

廣度優先搜尋 breadth first search bfs 是乙個分層搜尋的過程,沒有回退過程,是非遞迴的。為避免重複訪問,需要乙個狀態陣列visited n 來儲存各頂點的訪問狀態。為實現逐層訪問,bfs演算法在實現時需要乙個佇列,以記憶正在訪問的這一層和上一層的頂點,以便於向下一層訪問。例題...