亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

Prim(普里姆)算法求最小生成樹的思想及C語言實例講解

2020-01-26 14:32:04
字體:
來源:轉載
供稿:網友

Prim 算法思想:
從任意一頂點 v0 開始選擇其最近頂點 v1 構成樹 T1,再連接與 T1 最近頂點 v2 構成樹 T2, 如此重復直到所有頂點均在所構成樹中為止。
最小生成樹(MST):權值最小的生成樹。
生成樹和最小生成樹的應用:要連通n個城市需要n-1條邊線路。可以把邊上的權值解釋為線路的造價。則最小生成樹表示使其造價最小的生成樹。
構造網的最小生成樹必須解決下面兩個問題:
1、盡可能選取權值小的邊,但不能構成回路;
2、選取n-1條恰當的邊以連通n個頂點;
MST性質:假設G=(V,E)是一個連通網,U是頂點V的一個非空子集。若(u,v)是一條具有最小權值的邊,其中u∈U,v∈V-U,則必存在一棵包含邊(u,v)的最小生成樹。
prim算法假設G=(V,E)是連通的,TE是G上最小生成樹中邊的集合。算法從U={u0}(u0∈V)、TE={}開始。重復執行下列操作:
在所有u∈U,v∈V-U的邊(u,v)∈E中找一條權值最小的邊(u0,v0)并入集合TE中,同時v0并入U,直到V=U為止。
此時,TE中必有n-1條邊,T=(V,TE)為G的最小生成樹。
 Prim算法的核心:始終保持TE中的邊集構成一棵生成樹。
注意:prim算法適合稠密圖,其時間復雜度為O(n^2),其時間復雜度與邊得數目無關,而kruskal算法的時間復雜度為O(eloge)跟邊的數目有關,適合稀疏圖。
舉個簡單的例子來說明具體的實現方法:

2016626160439131.jpg (361×256)

G:圖,用鄰接矩陣表示
vcount:表示圖的頂點個數
max_vertexes:圖最大節點數
infinity:為無窮大
數組存儲從0開始
由于最小生成樹包含每個頂點,那么頂點的選中與否就可以直接用一個數組來標記used[max_vertexes];(我們這里直接使用程序代碼中的變量定義,這樣也易于理解);當選中一個數組的時候那么就標記,現在就有一個問題,怎么來選擇最小權值邊,注意這里最小權值邊是有限制的,邊的一個頂點一定在已選頂點中,另一個頂點當然就是在未選頂點集合中了。我最初的一個想法就是窮搜了,就是在一個集合中選擇一個頂點,來查找到另一個集合中的最小值,這樣雖然很易于理解,但是很明顯效率不是很高,在嚴蔚敏的《數據結構》上提供了一種比較好的方法來解決:設置兩個輔助數組lowcost[max_vertexes]和closeset[max_vertexes],lowcost[max_vertexes]數組記錄從U到V-U具有最小代價的邊。對于每個頂點v∈V-U,closedge[v], closeset[max_vertexes]記錄了該邊依附的在U中的頂點。

Prim 算法步驟:
T0 存放生成樹的邊,初值為空
輸入加權圖的帶權鄰接矩陣 C = (Cij)n×n (兩點間無邊相連則其大小為無窮)
為每個頂點 v 添加一屬性 L(v) :表 v 到 T0 的最小直接距離
(1) T0←∅, V1={v0}, C(T0)=0
(2) 對任意v ∈ V,L(v)←C(v, v0)
(3) If V==V1 then stop else goto next.
(4) 在 V-V1 中找點 u 使 L(u) =min{ L(v) | v ∈ (V − V1 )},記 V1 中與 u 相鄰點為 w.
(5) T0←T0∪{(u, w)}, C(T0) ←C(T0)+C(u, w), V1←V1∪{u}
(6) 對任意v ∈ (V − V1 ) if C(v, u)<L(v) then L(v) = C(v, u) else L(v)不變。
(7) Go to 3.

C++實現示例
prim.txt中的內容:

1 2 61 3 11 4 52 3 52 5 33 4 53 5 63 6 45 6 64 6 2

 
程序代碼:

#include<stdo.h>#include<string.h>#include <stdlib.h> #define infinity 1000000 //  定義兩個不直接相鄰一步到達頂點的距離 #define max_vertexes 6 //  定義圖形中頂點的個數 typedef int Graph[max_vertexes][max_vertexes];// 邊上的權值 void prim(Graph G,int vcount,int father[]){    int i,j,k;  int lowcost[max_vertexes];//最小代價邊上的權值  int closeset[max_vertexes],used[max_vertexes];//依附在U中的頂點;標記是否已被選中  int min;  int result=0;//記錄最短距離權值的和    for (i=0;i<vcoun;k++)  //初始化所有數組,把最短距離初始化為其他頂點到1結點的距離  {      lowcost[i]=G[0][i];       closeset[i]=0;      used[i]=0;     father[i]=-1;     }    used[0]=1;      for (i=1;i<=vcount-1;i++)     {      j=0;    min = infinity;         for (k=1;k<count;k++) //for循環得到離結點最近的頂點j   if ((!used[k])&&(lowcost[k]   {    min = lowcost[k];    j=k;   }   father[j]=closeset[j];    printf("%d %d/n",j+1,father[j]+1);//輸出當前找到的結點,該頂點依附的上一個結點   result=result+G[j][closeset[j]];   used[j]=1;;//把第j個頂點并入了U中     for (k=1;k           if (!used[k]&&(G[j][k]保留到k的最短路徑     {      lowcost[k]=G[j][k];         closeset[k]=j;    }     }  printf("%d",result);}        int main(){  FILE *fr;  int i,j,weight;  Graph G;  int fatheer[max_vertexes];  for(i=0; i<max_vertexes;i++)  for(j=0; j<max_vertexer;i++)  G[i][j] = infinity;  fr = fopen("prim.txt","r");  if(!fr)  {   printf("fopen failed/n");   exit(1);  }  while(fscanf(fr,"%d%d%d", &i, &j, &weight) != EOF)  {   G[i-1][j-1] = weight;   G[j-1][i-1] = weight;  }   prim(G,max_vertexes,fatheer);  return 0; }

測試的結果如下:
2016626160558508.jpg (490×297)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产亚洲精品激情久久| 美日韩精品视频免费看| 一区二区三区回区在观看免费视频| 国产精品流白浆视频| 国产精品一区久久| 欧美高清无遮挡| 亚洲成av人乱码色午夜| 国产高清视频一区三区| 欧美精品日韩www.p站| 日韩欧美在线视频观看| 久久久这里只有精品视频| 日韩欧美第一页| 久久久久中文字幕2018| 亚洲欧洲偷拍精品| 欧美激情一区二区三区成人| 性欧美xxxx| 日本一区二区三区四区视频| 日韩在线免费高清视频| 国产精品视频yy9099| 日韩国产一区三区| 精品国产一区二区三区久久狼黑人| 亚洲国产精品专区久久| 一本久久综合亚洲鲁鲁| 欧美黑人巨大xxx极品| 久久影视电视剧免费网站| 在线精品国产欧美| 2019国产精品自在线拍国产不卡| 欧美日韩亚洲天堂| 国语自产在线不卡| 久久国产精品影片| 国产成人精品久久二区二区91| 国产精品久久久久久久午夜| 久久天天躁狠狠躁夜夜躁| 亚洲欧美在线一区二区| 亚洲精美色品网站| 伊人久久精品视频| 国产精品午夜国产小视频| 91久久久久久久久久久| 国产第一区电影| 久久综合国产精品台湾中文娱乐网| 欧美性xxxxxx| 91亚洲va在线va天堂va国| 国产亚洲欧美日韩一区二区| 久久久久国产精品免费| 日韩亚洲精品电影| 久久伊人精品一区二区三区| 亚洲香蕉伊综合在人在线视看| 欧美日韩免费看| 欧美自拍视频在线观看| 国产成人激情视频| 久久久久久免费精品| 精品久久在线播放| 亚洲精品福利在线观看| 欧美黄色片视频| 欧美日韩国产va另类| 国产日韩在线观看av| 91久久久久久久久久| 久久久国产精彩视频美女艺术照福利| 欧美在线视频免费播放| 中文字幕欧美日韩va免费视频| 91国产精品91| 国产日韩在线免费| 国产精品高潮粉嫩av| 黑人巨大精品欧美一区二区| 欧美亚洲在线播放| 成人免费在线视频网站| 亚洲激情在线观看视频免费| 欧美国产精品人人做人人爱| 欧美肥婆姓交大片| 亚洲成av人影院在线观看| 久99九色视频在线观看| 久久精品国产精品| 亚洲影院色无极综合| 久久久免费精品视频| 91在线直播亚洲| 亚洲国产精品人人爽夜夜爽| 亚洲精品美女久久| 136fldh精品导航福利| 色婷婷久久一区二区| 欧美日韩在线视频一区| 日韩美女视频免费在线观看| 高清亚洲成在人网站天堂| 亚洲欧美制服另类日韩| 少妇精69xxtheporn| 欧美一级黄色网| 成人精品在线观看| 国产精品一区二区久久久久| 成人午夜在线视频一区| 欧美中文字幕第一页| 亚洲国产一区自拍| 亚洲视屏在线播放| 亚洲爱爱爱爱爱| 国产精品吊钟奶在线| 奇门遁甲1982国语版免费观看高清| 欧美精品一区在线播放| 美女性感视频久久久| 日韩在线视频导航| 亚洲一区国产精品| 91av在线免费观看| 91成人国产在线观看| 日韩电影免费在线观看| 欧美午夜精品久久久久久人妖| 欧美成人午夜免费视在线看片| 日韩www在线| 最近日韩中文字幕中文| 欧美精品久久一区二区| 日韩国产高清污视频在线观看| 在线日韩中文字幕| 亚洲欧美日韩精品久久奇米色影视| 亚洲久久久久久久久久| 亚洲精品一区二区网址| 668精品在线视频| 色综合导航网站| 国产精品黄页免费高清在线观看| 欧美日韩视频免费播放| 久久精品电影一区二区| 亚洲人成网站999久久久综合| 日本在线精品视频| 亚洲国产精品大全| 日韩国产高清视频在线| 国产在线播放91| 欧美不卡视频一区发布| 日本成熟性欧美| 日韩最新免费不卡| 欧美性受xxxx白人性爽| 亚洲女性裸体视频| 97在线免费观看视频| 久久久久久久网站| 欧美日韩久久久久| 久久精视频免费在线久久完整在线看| 日韩av在线免费观看| 国产成人拍精品视频午夜网站| 久久精品国产69国产精品亚洲| 丝袜美腿精品国产二区| 欧美激情网友自拍| 国产精品一区二区久久久久| 日韩中文字幕免费看| 中文字幕亚洲欧美日韩2019| 亚洲欧美综合精品久久成人| 亚洲综合精品一区二区| 久久免费成人精品视频| 欧美成年人视频| 久久久久久91香蕉国产| 成人精品aaaa网站| 国产一区二区三区在线观看视频| 日本亚洲欧洲色| 日韩亚洲第一页| 91亚洲精品久久久| 青青久久av北条麻妃海外网| 91精品久久久久久久久久久久久| 超在线视频97| 久久久爽爽爽美女图片| 国产精品视频999| 欧美高清videos高潮hd| 亚洲人成啪啪网站| 成人激情电影一区二区| 亚洲一区二区少妇| 国产剧情日韩欧美| 欧美黑人狂野猛交老妇| 欧美精品18videosex性欧美| 国产做受高潮69| 自拍偷拍亚洲区| 欧美国产视频日韩| 国产成人极品视频|