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

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

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

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

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

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

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

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

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

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

1 Prim算法與Dijkstra算法分析

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

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

2 代碼實現(xiàn)

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

表1 主要函數(shù)

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

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

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

表示algΤype為0時用Prim算法,非零時用Dijkstra算法。經(jīng)過如此設定,函數(shù)運行過程中調(diào)用的距離與輸出函數(shù)與所使用的算法能保持一致。共用函數(shù)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編程,實現(xiàn)二者的共用程序,這便于學生對兩種算法的理解。通過比較二者的異同,使學生能熟練掌握運用兩種方法,也提升學生的獨立思考能力。

參考文獻:

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

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

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

猜你喜歡
定義
以愛之名,定義成長
活用定義巧解統(tǒng)計概率解答題
例談橢圓的定義及其應用
題在書外 根在書中——圓錐曲線第三定義在教材和高考中的滲透
永遠不要用“起點”定義自己
海峽姐妹(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
主站蜘蛛池模板: 热久久综合这里只有精品电影| 国产亚洲欧美日本一二三本道| 另类欧美日韩| 777午夜精品电影免费看| 久久国产精品波多野结衣| 久久先锋资源| 国产熟女一级毛片| 无码福利日韩神码福利片| 午夜福利视频一区| 国产AV无码专区亚洲A∨毛片| 91久久国产成人免费观看| 亚洲精品大秀视频| 天堂成人av| 久久精品最新免费国产成人| 国产91精品调教在线播放| 漂亮人妻被中出中文字幕久久| 激情午夜婷婷| 国产区网址| 欧美一级色视频| 欧美劲爆第一页| 国产99视频免费精品是看6| 无码精油按摩潮喷在线播放| a级毛片免费网站| 亚洲福利片无码最新在线播放| 久久精品人人做人人爽| 欧美成a人片在线观看| 国产呦视频免费视频在线观看| 一级全免费视频播放| 亚洲综合经典在线一区二区| 国产好痛疼轻点好爽的视频| 国产噜噜在线视频观看| 亚欧成人无码AV在线播放| 精品国产免费观看一区| 黄色一及毛片| 亚洲视频三级| 97se亚洲综合在线韩国专区福利| 无码内射在线| 手机在线国产精品| 亚洲最大综合网| 成人欧美在线观看| 重口调教一区二区视频| AV网站中文| 亚洲欧美一区二区三区图片| 国产免费a级片| 国产精品综合色区在线观看| 国产99精品久久| www.亚洲色图.com| 国产理论精品| 亚洲女同欧美在线| 麻豆精品国产自产在线| 国产成人你懂的在线观看| 一级毛片在线播放免费观看| 成人午夜网址| 亚洲无码精品在线播放| 亚洲精品老司机| 国产精品欧美亚洲韩国日本不卡| 黄色免费在线网址| 日韩毛片免费观看| 视频一本大道香蕉久在线播放| …亚洲 欧洲 另类 春色| 欧美国产在线看| 国产精品成人观看视频国产| 国产一级毛片在线| 国产第一页免费浮力影院| 日本成人精品视频| 亚洲大尺度在线| 国产成a人片在线播放| 黄色网页在线播放| 国产乱肥老妇精品视频| 日韩一级二级三级| 亚洲香蕉在线| 婷婷六月天激情| 五月天综合网亚洲综合天堂网| 72种姿势欧美久久久大黄蕉| 亚洲欧美日韩天堂| 国产欧美专区在线观看| 亚洲精品国偷自产在线91正片| 亚洲成人动漫在线观看| 日韩A级毛片一区二区三区| 99国产精品一区二区| 国产69精品久久久久孕妇大杂乱 | 国产成人午夜福利免费无码r|