999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Prim算法與Dijkstra算法相似性有多少

2015-07-28 06:01:37尚寶欣東北電力大學理學院吉林吉林132012
山東工業技術 2015年11期
關鍵詞:定義

尚寶欣,陳 卓(東北電力大學 理學院,吉林 吉林 132012)

Prim算法與Dijkstra算法相似性有多少

尚寶欣,陳 卓
(東北電力大學 理學院,吉林 吉林 132012)

摘 要:數據結構中,Prim算法與Dijkstra算法所求的均是賦權圖的最小權值問題。Prim算法求連通賦權無向圖的最小生成樹,Dijkstra算法求賦權有向圖的單源最短路徑。在授課或是學習時,往往會強調兩者的不同點,卻忽略了兩者的相似性。本文分析兩個算法的相同點,使用C語言編寫兩種算法的通用程序。

關鍵詞:Prim算法;Dijkstra算法;相似性;通用程序 Prim算法與Dijkstra算法簡介

設有連通賦權無向圖G,G中有n個頂點。Prim算法可描述為:任取G中一個頂點作為最小生成樹的根,每次向當前樹中添加一個頂點和一條邊,要求這條邊為當前所確定樹的頂點與不在該樹中頂點所連邊中權值最小的一條邊,重復n-1次,依次將無向圖中所有頂點均添加至樹中,最后得到最小生成樹。

Dijkstra算法是在賦權有向圖中,將源點做為最短路徑的起始點,每次從最短路徑以外的頂點集合中通過比較從源點經由最短路徑中頂點到這些頂點路徑權值的大小,選擇權值最小的點加入最短路徑集合,即找到了從源點到該點的最短路徑,對余下的頂點進行類似的處理,重復次后,即求出單源到各頂點的最短路徑。

1 Prim算法與Dijkstra算法分析

記所有頂點集合為V,Prim算法和Dijkstra算法均是將圖中的頂點分為兩部分,記所求的最小生成樹或者單源最短路徑的頂點集合為U,每次都在V-U集合中選擇一個頂點放入U中,這個頂點的邊要求滿足算法所定義的距離極小性,依次選擇,直到U=V時停止添加,所得到的樹就能代表最小生成樹或是單源最短路徑。

兩個算法的區別主要是對頂點之間距離的定義不同,Prim算法定義的距離是集合V-U中的點與U中點所確定邊的最小權值,而Dijkstra算法定義的距離是源點到其他點的直接到達路徑與通過中間點到達的路徑的最小權值。

2 代碼實現

根據上述分析,確定主體函數模塊。Prim算法和Dijkstra算法除了距離定義不同以外,兩者所求結果所表示的含義也不盡相同,因此最小生成樹與單源最短路徑的輸出要分別用兩個函數來完成。兩者共用的調用函數根據主函數輸入的信息確定距離函數與輸出函數,此過程在該函數內部使用函數指針實現。表1列舉出需要調用的主要函數。

表1 主要函數

兩種算法的主要差別在于對頂點之間距離的定義不同。Prim算法中頂點u和v之間的距離為鄰接矩陣ΑdjMat[u][v]中元素的值,由該矩陣可直接讀出距離,在程序中用PrimDist表示;Dijkstra算法中頂點u和v的距離定義為從源點出發經由u點到達v點需要的最短距離,它需要判別有向圖中距離是否存在,若存在則把鄰接矩陣的權值加上上次循環得到的最短距離,即ΑdjMat[u][v] == -1 || lowcost[u] == -1 ? -1 : lowcost[u] + ΑdjMat[u][v],在程序中用DijkDist表示。

PrimΑndDijk為兩算法的共用函數。在該函數中使用函數指針實現不同距離函數及不同輸出函數的選擇。例如Prim算法時只需要輸出最小生成樹,包含頂點及邊的權值即可;而Dijkstra算法則是輸出源點到各個點的最短路徑,因此需要輸出完整的路徑及最短的路徑長度。使用PrintRes表示要輸出程序的運行結果,則程序片斷

algΤype? (PrintRes = DijkPrint,Distance = DijkDist ):(PrintRes = PrimPrint, Distance = PrimDist);

表示algΤype為0時用Prim算法,非零時用Dijkstra算法。經過如此設定,函數運行過程中調用的距離與輸出函數與所使用的算法能保持一致。共用函數PrimΑndDijk的詳細源代碼如下:

void PrimΑndDijk(int** ΑdjMat, int vexCnt, int src, int algΤype=0){

int* closest = NULL; int* lowcost = NULL;

int* flag = NULL;

int(*Distance)(int** ΑdjMat, int u, int v, int* lowcost);

void(*PrintRes)(int* lowcost, int* closest, int n, int v);

int i, j, min, k, d;

closest = new int[vexCnt]; lowcost = new int[vexCnt];

flag = new int[vexCnt];

// algΤype為0時用Prim算法,非零時用Dijkstra算法

algΤype? (PrintRes=DijkPrint, Distance=DijkDist) : (PrintRes =PrimPrint, Distance = PrimDist);

for (i = 0; i < vexCnt; i++){// 初始化過程

flag[i] = 0; lowcost[i] = ΑdjMat[src][i]; closest[i] = src;}

flag[src] = 1;

// 找滿足最小距離條件的頂點

for (i = 1; i < vexCnt; i++){

min = 300000; k = -1;

for (j = 0; j < vexCnt; j++){

if (flag[j]!=1 && lowcost[j] != -1 && lowcost[j] !=0 && lowcost[j] <min)

{min = lowcost[j]; k = j;}

}

flag[k] = 1;

for (j = 0; j < vexCnt; j++){

d = -1;

if (!flag[j]){

d = Distance(ΑdjMat, k, j, lowcost);

if (d!=-1 && d!=0 && (lowcost[j]>d || lowcost[j]==-1)){ lowcost[j] = d;

closest[j] = k; }}}}

PrintRes(lowcost, closest, vexCnt, src);

delete[] closest; delete[] lowcost; delete[] flag;

}

3 結論

本文分析了Prim算法和Dijkstra算法的相同點,用Visual C++ 6.0編程,實現二者的共用程序,這便于學生對兩種算法的理解。通過比較二者的異同,使學生能熟練掌握運用兩種方法,也提升學生的獨立思考能力。

參考文獻:

[1]曲朝陽.數據結構[J].北京:中國電力出版社,2007.

[2]譚浩強.C語言程序設計教程[S].北京:高等教育出版社,2007.

作者簡介:尚寶欣(1984-),碩士,講師。

猜你喜歡
定義
以愛之名,定義成長
活用定義巧解統計概率解答題
例談橢圓的定義及其應用
題在書外 根在書中——圓錐曲線第三定義在教材和高考中的滲透
永遠不要用“起點”定義自己
海峽姐妹(2020年9期)2021-01-04 01:35:44
嚴昊:不定義終點 一直在路上
華人時刊(2020年13期)2020-09-25 08:21:32
定義“風格”
成功的定義
山東青年(2016年1期)2016-02-28 14:25:25
有壹手——重新定義快修連鎖
修辭學的重大定義
當代修辭學(2014年3期)2014-01-21 02:30:44
主站蜘蛛池模板: 午夜限制老子影院888| 在线观看亚洲国产| 国产成人无码播放| 成人福利免费在线观看| 九九九国产| 最新国产你懂的在线网址| 亚洲高清无码久久久| 人妻无码中文字幕第一区| 免费高清自慰一区二区三区| 99在线观看视频免费| 最新国产成人剧情在线播放| 国产黄色片在线看| 色哟哟国产精品| 手机永久AV在线播放| 91免费在线看| 在线国产综合一区二区三区 | 日本a∨在线观看| 国产成人无码Av在线播放无广告| 91精品最新国内在线播放| 国产一区二区三区免费观看| 综合色区亚洲熟妇在线| 97国产精品视频自在拍| 免费a在线观看播放| 亚洲欧美激情小说另类| 国产乱视频网站| 999精品视频在线| 日韩av在线直播| 亚洲欧美成人综合| 福利一区在线| 无码专区国产精品一区| 久久综合九九亚洲一区| 在线无码九区| 欧美精品综合视频一区二区| 九色视频一区| 波多野结衣无码视频在线观看| 亚洲午夜久久久精品电影院| 国产成人高清精品免费| 国产精品浪潮Av| 青青青视频91在线 | 国产一级特黄aa级特黄裸毛片| 伊人激情综合网| 中文字幕 欧美日韩| 亚洲AV一二三区无码AV蜜桃| 美女啪啪无遮挡| 欧美福利在线观看| 日韩欧美中文字幕一本| 国模私拍一区二区| 女人18毛片一级毛片在线 | 国产综合无码一区二区色蜜蜜| 少妇极品熟妇人妻专区视频| 国产资源免费观看| 91精品国产麻豆国产自产在线| 久久香蕉国产线| 色播五月婷婷| 国产成人91精品| 精品视频在线观看你懂的一区 | 久爱午夜精品免费视频| 91精品啪在线观看国产91| 91福利免费| 91免费观看视频| 日本一本正道综合久久dvd| 欧美一级高清视频在线播放| 在线观看免费国产| 婷婷综合缴情亚洲五月伊| 精品国产一区二区三区在线观看| 日韩黄色大片免费看| 91探花国产综合在线精品| 色综合激情网| 99ri精品视频在线观看播放| 91福利国产成人精品导航| 久久精品无码一区二区国产区| 久久久久免费看成人影片| 91精品国产自产在线老师啪l| 四虎影视库国产精品一区| 国产精品久久久久久影院| 亚洲日韩高清无码| 草草影院国产第一页| 久草网视频在线| 片在线无码观看| 午夜福利网址| 91小视频在线观看| 国产乱子伦精品视频|