图的遍历(C语言,邻接表存储的图 - DFS,邻接矩阵存储的图 - BFS)
生活随笔
收集整理的這篇文章主要介紹了
图的遍历(C语言,邻接表存储的图 - DFS,邻接矩阵存储的图 - BFS)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
鄰接表存儲(chǔ)的圖 - DFS
/* 鄰接表存儲(chǔ)的圖 - DFS */void Visit( Vertex V ) {printf("正在訪問頂點(diǎn)%d\n", V); }/* Visited[]為全局變量,已經(jīng)初始化為false */ void DFS( LGraph Graph, Vertex V, void (*Visit)(Vertex) ) { /* 以V為出發(fā)點(diǎn)對(duì)鄰接表存儲(chǔ)的圖Graph進(jìn)行DFS搜索 */PtrToAdjVNode W;Visit( V ); /* 訪問第V個(gè)頂點(diǎn) */Visited[V] = true; /* 標(biāo)記V已訪問 */for( W=Graph->G[V].FirstEdge; W; W=W->Next ) /* 對(duì)V的每個(gè)鄰接點(diǎn)W->AdjV */if ( !Visited[W->AdjV] ) /* 若W->AdjV未被訪問 */DFS( Graph, W->AdjV, Visit ); /* 則遞歸訪問之 */ }鄰接矩陣存儲(chǔ)的圖 - BFS:
/* 鄰接矩陣存儲(chǔ)的圖 - BFS *//* IsEdge(Graph, V, W)檢查<V, W>是否圖Graph中的一條邊,即W是否V的鄰接點(diǎn)。 */ /* 此函數(shù)根據(jù)圖的不同類型要做不同的實(shí)現(xiàn),關(guān)鍵取決于對(duì)不存在的邊的表示方法。*/ /* 例如對(duì)有權(quán)圖, 如果不存在的邊被初始化為INFINITY, 則函數(shù)實(shí)現(xiàn)如下: */ bool IsEdge( MGraph Graph, Vertex V, Vertex W ) {return Graph->G[V][W]<INFINITY ? true : false; }/* Visited[]為全局變量,已經(jīng)初始化為false */ void BFS ( MGraph Graph, Vertex S, void (*Visit)(Vertex) ) { /* 以S為出發(fā)點(diǎn)對(duì)鄰接矩陣存儲(chǔ)的圖Graph進(jìn)行BFS搜索 */Queue Q; Vertex V, W;Q = CreateQueue( MaxSize ); /* 創(chuàng)建空隊(duì)列, MaxSize為外部定義的常數(shù) *//* 訪問頂點(diǎn)S:此處可根據(jù)具體訪問需要改寫 */Visit( S );Visited[S] = true; /* 標(biāo)記S已訪問 */AddQ(Q, S); /* S入隊(duì)列 */while ( !IsEmpty(Q) ) {V = DeleteQ(Q); /* 彈出V */for( W=0; W<Graph->Nv; W++ ) /* 對(duì)圖中的每個(gè)頂點(diǎn)W *//* 若W是V的鄰接點(diǎn)并且未訪問過 */if ( !Visited[W] && IsEdge(Graph, V, W) ) {/* 訪問頂點(diǎn)W */Visit( W );Visited[W] = true; /* 標(biāo)記W已訪問 */AddQ(Q, W); /* W入隊(duì)列 */}} /* while結(jié)束*/ }總結(jié)
以上是生活随笔為你收集整理的图的遍历(C语言,邻接表存储的图 - DFS,邻接矩阵存储的图 - BFS)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java实现Huffman哈夫曼树(数组
- 下一篇: dijkstra算法和floyd算法(C