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

首頁 > 編程 > C++ > 正文

使用C語言實現最小生成樹求解的簡單方法

2020-05-23 14:15:59
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了使用C語言實現最小生成樹求解的簡單方法,包括Prim算法和Kruskal算法的兩種求解方式,需要的朋友可以參考下

最小生成樹Prim算法樸素版

有幾點需要說明一下。

1、2個for循環都是從2開始的,因為一般我們默認開始就把第一個節點加入生成樹,因此之后不需要再次尋找它。

2、lowcost[i]記錄的是以節點i為終點的最小邊權值。初始化時因為默認把第一個節點加入生成樹,因此lowcost[i] = graph[1][i],即最小邊權值就是各節點到1號節點的邊權值。

3、mst[i]記錄的是lowcost[i]對應的起點,這樣有起點,有終點,即可唯一確定一條邊了。初始化時mst[i] = 1,即每條邊都是從1號節點出發。

編寫程序:對于如下一個帶權無向圖,給出節點個數以及所有邊權值,用Prim算法求最小生成樹。

使用C語言實現最小生成樹求解的簡單方法

輸入數據:

7 11

A B 7

A D 5

B C 8

B D 9

B E 7

C E 5

D E 15

D F 6

E F 8

E G 9

F G 11

輸出:

A - D : 5

D - F : 6

A - B : 7

B - E : 7

E - C : 5

E - G : 9

Total:39

最小生成樹Prim算法樸素版 C語言實現 代碼如下

 

 
  1. #include <stdio.h> 
  2. #include <stdlib.h> 
  3.  
  4. #define MAX 100 
  5. #define MAXCOST 0x7fffffff 
  6.  
  7. int graph[MAX][MAX]; 
  8.  
  9. int Prim(int graph[][MAX], int n) 
  10. /* lowcost[i]記錄以i為終點的邊的最小權值,當lowcost[i]=0時表示終點i加入生成樹 */ 
  11. int lowcost[MAX]; 
  12.  
  13. /* mst[i]記錄對應lowcost[i]的起點,當mst[i]=0時表示起點i加入生成樹 */ 
  14. int mst[MAX]; 
  15.  
  16. int i, j, min, minid, sum = 0; 
  17.  
  18. /* 默認選擇1號節點加入生成樹,從2號節點開始初始化 */ 
  19. for (i = 2; i <= n; i++) 
  20. /* 最短距離初始化為其他節點到1號節點的距離 */ 
  21. lowcost[i] = graph[1][i]; 
  22.  
  23. /* 標記所有節點的起點皆為默認的1號節點 */ 
  24. mst[i] = 1; 
  25.  
  26. /* 標記1號節點加入生成樹 */ 
  27. mst[1] = 0; 
  28.  
  29. /* n個節點至少需要n-1條邊構成最小生成樹 */ 
  30. for (i = 2; i <= n; i++) 
  31. min = MAXCOST; 
  32. minid = 0; 
  33.  
  34. /* 找滿足條件的最小權值邊的節點minid */ 
  35. for (j = 2; j <= n; j++) 
  36. /* 邊權值較小且不在生成樹中 */ 
  37. if (lowcost[j] < min && lowcost[j] != 0) 
  38. min = lowcost[j]; 
  39. minid = j; 
  40. /* 輸出生成樹邊的信息:起點,終點,權值 */ 
  41. printf("%c - %c : %d/n", mst[minid] + 'A' - 1, minid + 'A' - 1, min); 
  42.  
  43. /* 累加權值 */ 
  44. sum += min; 
  45.  
  46. /* 標記節點minid加入生成樹 */ 
  47. lowcost[minid] = 0; 
  48.  
  49. /* 更新當前節點minid到其他節點的權值 */ 
  50. for (j = 2; j <= n; j++) 
  51. /* 發現更小的權值 */ 
  52. if (graph[minid][j] < lowcost[j]) 
  53. /* 更新權值信息 */ 
  54. lowcost[j] = graph[minid][j]; 
  55.  
  56. /* 更新最小權值邊的起點 */ 
  57. mst[j] = minid; 
  58. /* 返回最小權值和 */ 
  59. return sum; 
  60.  
  61. int main() 
  62. int i, j, k, m, n; 
  63. int x, y, cost; 
  64. char chx, chy; 
  65.  
  66. /* 讀取節點和邊的數目 */ 
  67. scanf("%d%d", &m, &n); 
  68. getchar(); 
  69.  
  70. /* 初始化圖,所有節點間距離為無窮大 */ 
  71. for (i = 1; i <= m; i++) 
  72. for (j = 1; j <= m; j++) 
  73. graph[i][j] = MAXCOST; 
  74.  
  75. /* 讀取邊信息 */ 
  76. for (k = 0; k < n; k++) 
  77. scanf("%c %c %d", &chx, &chy, &cost); 
  78. getchar(); 
  79. i = chx - 'A' + 1; 
  80. j = chy - 'A' + 1; 
  81. graph[i][j] = cost; 
  82. graph[j][i] = cost; 
  83.  
  84. /* 求解最小生成樹 */ 
  85. cost = Prim(graph, m); 
  86.  
  87. /* 輸出最小權值和 */ 
  88. printf("Total:%d/n", cost); 
  89.  
  90. //system("pause"); 
  91. return 0;  

Kruskal算法:

 

 
  1. void Kruskal(Edge E[],int n,int e) 
  2. int i,j,m1,m2,sn1,sn2,k; 
  3. int vset[MAXE]; 
  4. for (i=0;i<n;i++) vset[i]=i; //初始化輔助數組 
  5. k=1; //k表示當前構造最小生成樹的第幾條邊,初值為1 
  6. j=0; //E中邊的下標,初值為0 
  7. while (k<n) //生成的邊數小于n時循環 
  8. {  
  9. m1=E[j].u;m2=E[j].v; //取一條邊的頭尾頂點 
  10. sn1=vset[m1];sn2=vset[m2]; //分別得到兩個頂點所屬的集合編號 
  11. if (sn1!=sn2) //兩頂點屬于不同的集合,該邊是最小生成樹的一條邊 
  12. {  
  13. printf(" (%d,%d):%d/n",m1,m2,E[j].w); 
  14. k++; //生成邊數增1 
  15. for (i=0;i<n;i++) //兩個集合統一編號 
  16. if (vset[i]==sn2) //集合編號為sn2的改為sn1 
  17. vset[i]=sn1; 
  18. j++; //掃描下一條邊 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲综合自拍一区| 国产精品久久久久久久一区探花| 国产精品91一区| 亚洲free性xxxx护士hd| 美女999久久久精品视频| 青青草99啪国产免费| 一区二区在线免费视频| 欧美xxxx18国产| 亚洲精品福利在线观看| 91中文字幕在线观看| 久久亚洲影音av资源网| 久久久亚洲影院你懂的| 国产欧美日韩精品丝袜高跟鞋| 欧美性xxxxx极品娇小| 久久久久久久久久久久av| 国产高清在线不卡| 亚洲视频综合网| 尤物精品国产第一福利三区| 欧美激情在线观看视频| 日韩亚洲在线观看| 精品成人在线视频| 国产日韩欧美中文在线播放| 国产玖玖精品视频| 91精品国产免费久久久久久| 亚洲色图色老头| 亚洲欧美国产另类| 国产91色在线免费| 国模精品视频一区二区三区| 久久久久久久一| 色噜噜国产精品视频一区二区| 一区二区三区国产视频| 在线国产精品播放| 精品丝袜一区二区三区| 这里只有精品丝袜| 久久人人97超碰精品888| 一本色道久久88综合日韩精品| 亚洲午夜av久久乱码| 4438全国亚洲精品在线观看视频| 成人黄色大片在线免费观看| 国产自产女人91一区在线观看| 精品国产电影一区| 亚洲第一页在线| 国产婷婷色综合av蜜臀av| 亚洲国产欧美一区二区丝袜黑人| 欧美日韩在线看| 久久九九精品99国产精品| 日韩黄色av网站| 国产视频亚洲视频| 亚洲男人天堂手机在线| 国产亚洲欧美aaaa| 亚洲xxxx做受欧美| 国自在线精品视频| 国产一区二区三区免费视频| 欧美超级免费视 在线| 亚洲国产日韩精品在线| 97在线看免费观看视频在线观看| 国产成人精品在线播放| 久久久久久国产精品美女| 国产精品久久久av久久久| 久久午夜a级毛片| 全亚洲最色的网站在线观看| 九九久久精品一区| 欧美电影免费观看网站| 久久露脸国产精品| 中文字幕在线观看亚洲| 欧美性猛交xxxx免费看久久久| 日韩免费视频在线观看| 上原亚衣av一区二区三区| 国产精品91在线| 日韩视频欧美视频| 久久激情五月丁香伊人| 亚洲精品视频网上网址在线观看| 亚洲综合日韩在线| 成人中文字幕+乱码+中文字幕| 韩国三级电影久久久久久| 欧美大片在线看免费观看| 国产精品高潮呻吟久久av野狼| 成人动漫网站在线观看| 4438全国成人免费| 97激碰免费视频| 亚洲精品国产精品自产a区红杏吧| 国内外成人免费激情在线视频网站| 欧美在线日韩在线| 国产成人久久精品| 中文字幕精品在线视频| 亚洲人成电影网站色xx| 成人乱人伦精品视频在线观看| 自拍偷拍亚洲在线| 日本亚洲欧洲色α| 国产精品狠色婷| 欧洲美女免费图片一区| 久久久久久久久亚洲| 91亚洲精品久久久| 懂色av中文一区二区三区天美| 97久久精品在线| 午夜免费日韩视频| 懂色av中文一区二区三区天美| 日韩精品中文字| www.欧美精品一二三区| 欧美午夜美女看片| 国产精品麻豆va在线播放| 555www成人网| 92福利视频午夜1000合集在线观看| 亚洲精品永久免费| 亚洲精品国产精品国产自| 伊人久久大香线蕉av一区二区| 欧美性猛交xxxxx水多| 久久在精品线影院精品国产| 性日韩欧美在线视频| 日韩美女在线观看| 91国内精品久久| 亚洲最大福利视频网| 日韩美女免费线视频| 操91在线视频| 日韩欧美有码在线| 国产精品激情av在线播放| 尤物99国产成人精品视频| 欧美日韩国内自拍| 亚洲日本中文字幕免费在线不卡| 久久精品视频在线| 最近中文字幕mv在线一区二区三区四区| y97精品国产97久久久久久| 亚洲二区在线播放视频| 色婷婷**av毛片一区| 欧美成人网在线| 91夜夜未满十八勿入爽爽影院| 日韩免费观看高清| 国产福利视频一区二区| 日韩av日韩在线观看| www.日韩免费| 国产精品久久久久影院日本| 亚洲娇小xxxx欧美娇小| 国产视频精品自拍| 一区二区三区视频免费在线观看| 韩曰欧美视频免费观看| 亚洲福利视频网| 国产精品国产福利国产秒拍| 国产亚洲一区二区在线| 亚洲国产天堂久久国产91| 欧美丝袜一区二区| 亚洲成人久久久久| 亚洲精品日韩久久久| 国产精品欧美日韩久久| 国产精品成人va在线观看| 久久久久久午夜| 中文字幕在线观看日韩| 26uuu日韩精品一区二区| 日韩av手机在线看| 亚州精品天堂中文字幕| 91影视免费在线观看| 国产精品igao视频| 欧美中文在线字幕| 91色中文字幕| 国产精品久久色| 亚洲视频专区在线| 亚洲欧美激情在线视频| 国产精品美女999| 成人女保姆的销魂服务| 精品电影在线观看| 26uuu亚洲伊人春色| 日韩av电影在线免费播放| 欧美激情中文字幕乱码免费| 日本国产高清不卡| 午夜精品久久久久久久男人的天堂|