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
主站蜘蛛池模板: 青青热久麻豆精品视频在线观看| 香蕉伊思人视频| 日韩一区精品视频一区二区| 日本免费精品| 伊人久久大香线蕉综合影视| 激情国产精品一区| 熟妇人妻无乱码中文字幕真矢织江| 人妻无码一区二区视频| 久久久国产精品无码专区| 国产网站免费看| 欧美 亚洲 日韩 国产| 色欲不卡无码一区二区| 国产日韩欧美视频| 直接黄91麻豆网站| 伊人久久婷婷五月综合97色| 一区二区三区毛片无码| 狠狠ⅴ日韩v欧美v天堂| 欧美成人第一页| 一本二本三本不卡无码| 久久精品人人做人人| 国产激情无码一区二区APP| 青青草国产精品久久久久| 国产主播在线一区| 国产成人精品一区二区三区| 亚洲熟妇AV日韩熟妇在线| 女人18毛片水真多国产| 成人在线欧美| 丁香五月激情图片| 丁香亚洲综合五月天婷婷| 色婷婷综合在线| 国产欧美精品一区aⅴ影院| 欧美精品v| 高清无码手机在线观看| 丁香亚洲综合五月天婷婷| 精品无码国产自产野外拍在线| 日韩专区欧美| 国产一区二区三区在线精品专区 | 国产精品xxx| 99福利视频导航| 91在线精品麻豆欧美在线| 狠狠色丁香婷婷综合| 欧洲av毛片| 日韩精品无码不卡无码| 国产福利免费视频| 欧美专区日韩专区| 婷婷综合在线观看丁香| 国产特一级毛片| 久久精品国产在热久久2019| 青青青伊人色综合久久| 亚洲一区二区在线无码| 在线播放精品一区二区啪视频| www.国产福利| 欧美日韩国产在线观看一区二区三区 | 亚洲最大情网站在线观看| 国产jizz| 亚洲欧州色色免费AV| 国产精品美人久久久久久AV| 亚洲精品777| 国内精自视频品线一二区| 国产69精品久久久久妇女| 国产香蕉97碰碰视频VA碰碰看| 欧美成人精品高清在线下载| 国产精品白浆无码流出在线看| 色婷婷综合激情视频免费看| 亚洲无限乱码一二三四区| 国产杨幂丝袜av在线播放| 国产一级小视频| 欧美中文字幕第一页线路一| 99免费在线观看视频| 国产美女91视频| 99热这里只有免费国产精品 | 亚洲天堂色色人体| 国产成人精彩在线视频50| 一本一道波多野结衣av黑人在线| 亚洲香蕉久久| 午夜福利免费视频| 成人福利在线看| 中文字幕欧美日韩高清| 天堂在线亚洲| 亚洲日韩高清在线亚洲专区| 国产女人18毛片水真多1| 亚洲欧洲免费视频|