/*
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可以很容易的利用層數求出最短的步數,比如二叉樹利用層序遍歷求樹的高度,但深搜一般也可以實現。廣度優先搜尋能...