日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【算法】广度遍历算法的应用 求出距离顶点v0的最短路径长度为最长的一个顶点,图结构的bfs生成树及其双亲表示形式

發(fā)布時(shí)間:2024/9/30 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【算法】广度遍历算法的应用 求出距离顶点v0的最短路径长度为最长的一个顶点,图结构的bfs生成树及其双亲表示形式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

例: 求出距離頂點(diǎn)v0的最短路徑長度為最長的一個(gè)頂點(diǎn),并要求盡可能節(jié)省時(shí)間

分析:
用bfs算法(利用bfs算法的層次特性):
從v0出發(fā)進(jìn)行廣度遍歷時(shí), 最后一層的頂點(diǎn)距離v0的最短路徑長度最長。因而可能有多個(gè)解,按照本題要求,只要能求出其中一個(gè)便可。

int maxdist (Graph G, int v0) {int w; Queue Q; // 定義算法中用到的局部變量和隊(duì)列for (i=1; i<=n; i++) visited[i]=FALSE;//初始化標(biāo)志位visited[v0]=TRUE; //訪問頂點(diǎn)v0,其中僅需設(shè)置訪問標(biāo)志Q.Append(v0); // 被訪問頂點(diǎn)入隊(duì)while (!Empty(Q)){v=Q.Serve(); // 從隊(duì)列Q中取頂點(diǎn),以檢測和訪問其鄰接頂點(diǎn)w=firstadj(G,v); // 求頂點(diǎn)v的第一個(gè)鄰接點(diǎn)while (w!=0) { // 依次訪問v的未被訪問過的鄰接點(diǎn)if (!visited[w]) { visited[w]=TRUE; Q.Append(w); } // 訪問鄰接點(diǎn)ww=nextadj(G,v,w);} }return v; //將最后一個(gè)出隊(duì)列的v作為結(jié)果返回 }

圖結(jié)構(gòu)的bfs生成樹及其雙親表示形式

簡便起見,選擇雙親表示法,即對每個(gè)頂點(diǎn),僅給出其父結(jié)點(diǎn)信息。
這種表示方法的優(yōu)點(diǎn)是簡便、節(jié)省空間
不足是:不直觀,在輸出各路徑時(shí)需要反向求解

void bfsSpanTree (Graph G, int v0){int w; queue Q; for (i=1; i<=n; i++) visited[i]=FALSE; visited[v0]=TRUE; Q.Append(v0); //訪問頂點(diǎn)v0,其中僅設(shè)置訪問標(biāo)志 parentof[v0]=0; //記錄頂點(diǎn)v0的雙親結(jié)點(diǎn)為0while (!Empty(Q)){v=Q.Serve(); // 從隊(duì)列Q中取出頂點(diǎn)到v, 以訪問其鄰接頂點(diǎn)w=firstadj(G,v); // 求頂點(diǎn)v的第一個(gè)鄰接點(diǎn)while (w!=0){ //依次訪問v的未被訪問過的鄰接點(diǎn)if (!visited[w]) { visited[w]=TRUE; Q.append(w); // 訪問鄰接點(diǎn)wparentof[w]= v; // 記錄頂點(diǎn)w的雙親結(jié)點(diǎn)為v }w=nextadj(G,v,w);}}for (i=1; i<=n; i++)printpath(parentof, i); // 輸出v0到頂點(diǎn)i的最短路徑 }

其中printpath算法描述如下:

void printpath(int parentof[], int i){ // 輸出v0到頂點(diǎn)i的最短路徑 if (i!=0){if (i== v0) cout<< v0;else { printpath(parentof, parentof[i]);cout<<”?”<<i; // 輸出路徑上的頂點(diǎn)}} }

總結(jié)

以上是生活随笔為你收集整理的【算法】广度遍历算法的应用 求出距离顶点v0的最短路径长度为最长的一个顶点,图结构的bfs生成树及其双亲表示形式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。