BFS(廣度優先搜尋)遍歷

2021-10-12 09:59:54 字數 1660 閱讀 5671

/*

bfs: 廣度優先,結合佇列實現遍歷方式

1.選對乙個入口

2.訪問所有的當前頂點的所有鄰接頂點

3.出隊,找當前頂點鄰接頂點

4.標記已經遍歷節點

5.隊列為null,所有頂點都被訪問

*/#define _crt_secure_no_warnings

#include

#include

#include

typedef

char vertextype[4]

;#define max 10

typedef

struct arcnode

node,

*lpnode;

//鍊錶操作

lpnode createnode

(int vexindex)

//無表頭鍊錶的表頭法插入

//lpnode *headnode這裡用的是二級指標,因為無表頭的插入會修改表頭的指向

void

insertnodebyhead

(lpnode *headnode,

int vexindex)

//圖結構:陣列,鍊錶

//頂點資訊描述出來

typedef

struct vnode

vnode,array[max]

,*lpvnode;

//圖typedef

struct graph

graph,

*lpgraph;

//建立圖

intsearchpos

(lpgraph g,vertextype x)

}return-1

;}//建立圖

lpgraph creategraph()

vertextype v1,v2;

int posv1;

int posv2;

printf

("請輸入邊的資訊:\n");

for(

int i=

0;iarcnum;i++

)return g;

}//訪問

void

visitvextex

(vertextype x)

;//訪問標記

//對列三要素

int queue[max]

;//頂點的序號

int front;=-

1;//隊頭的元素

int rear =-1

;//隊尾的元素

//1.選定入口

visitvextex

(g->vextex[inpos]

.data)

; viseted[inpos]=1

;//把訪問標記置為 1

queue[

++rear]

= inpos;

//把走過的元素入隊

lpnode pmove =

null

;while

(front < rear)

pmove = pmove->next;

//被列印就不再做列印處理]}

}int

main()

BFS廣度優先搜尋遍歷

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

廣度優先搜尋 BFS遍歷

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

BFS廣度優先遍歷

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