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

首頁 > 編程 > C > 正文

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

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

最小生成樹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算法求最小生成樹。

2015819151522690.png (600×445)

輸入數據:

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語言實現 代碼如下

#include <stdio.h>#include <stdlib.h> #define MAX 100#define MAXCOST 0x7fffffff int graph[MAX][MAX]; int Prim(int graph[][MAX], int n){ /* lowcost[i]記錄以i為終點的邊的最小權值,當lowcost[i]=0時表示終點i加入生成樹 */ int lowcost[MAX];  /* mst[i]記錄對應lowcost[i]的起點,當mst[i]=0時表示起點i加入生成樹 */ int mst[MAX];  int i, j, min, minid, sum = 0;  /* 默認選擇1號節點加入生成樹,從2號節點開始初始化 */ for (i = 2; i <= n; i++) { /* 最短距離初始化為其他節點到1號節點的距離 */ lowcost[i] = graph[1][i];  /* 標記所有節點的起點皆為默認的1號節點 */ mst[i] = 1; }  /* 標記1號節點加入生成樹 */ mst[1] = 0;  /* n個節點至少需要n-1條邊構成最小生成樹 */ for (i = 2; i <= n; i++) { min = MAXCOST; minid = 0;  /* 找滿足條件的最小權值邊的節點minid */ for (j = 2; j <= n; j++) {  /* 邊權值較小且不在生成樹中 */  if (lowcost[j] < min && lowcost[j] != 0)  {  min = lowcost[j];  minid = j;  } } /* 輸出生成樹邊的信息:起點,終點,權值 */ printf("%c - %c : %d/n", mst[minid] + 'A' - 1, minid + 'A' - 1, min);  /* 累加權值 */ sum += min;  /* 標記節點minid加入生成樹 */ lowcost[minid] = 0;  /* 更新當前節點minid到其他節點的權值 */ for (j = 2; j <= n; j++) {  /* 發現更小的權值 */  if (graph[minid][j] < lowcost[j])  {  /* 更新權值信息 */  lowcost[j] = graph[minid][j];   /* 更新最小權值邊的起點 */  mst[j] = minid;  } } } /* 返回最小權值和 */ return sum;} int main(){ int i, j, k, m, n; int x, y, cost; char chx, chy;  /* 讀取節點和邊的數目 */ scanf("%d%d", &m, &n); getchar();  /* 初始化圖,所有節點間距離為無窮大 */ for (i = 1; i <= m; i++) { for (j = 1; j <= m; j++) {  graph[i][j] = MAXCOST; } }  /* 讀取邊信息 */ for (k = 0; k < n; k++) { scanf("%c %c %d", &chx, &chy, &cost); getchar(); i = chx - 'A' + 1; j = chy - 'A' + 1; graph[i][j] = cost; graph[j][i] = cost; }  /* 求解最小生成樹 */ cost = Prim(graph, m);  /* 輸出最小權值和 */ printf("Total:%d/n", cost);  //system("pause"); return 0; }

Kruskal算法:

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

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

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲aⅴ日韩av电影在线观看| 国产美女久久精品香蕉69| 欧美日韩国产一中文字不卡| 最近免费中文字幕视频2019| 亚洲欧美激情一区| 亚洲欧洲高清在线| 欧美日韩亚洲91| 日韩中文字幕网站| 国产精品久久色| www亚洲精品| 中文字幕精品在线视频| 国产精品一久久香蕉国产线看观看| 一区二区三区无码高清视频| 亚洲伊人久久综合| 欧美在线视频一二三| 国产精品ⅴa在线观看h| yellow中文字幕久久| 国产精品久久久久久av| 久久91亚洲人成电影网站| 亚洲第一级黄色片| 538国产精品一区二区免费视频| 91视频国产精品| 欧美精品在线观看91| 91精品国产91久久久| 久久久久久久久久av| 国产视频欧美视频| 亚洲精品一区中文| 91在线无精精品一区二区| 国产亚洲精品久久久久动| 久久久久国产一区二区三区| 国产欧美久久一区二区| 色噜噜狠狠色综合网图区| 亚洲免费精彩视频| 亚洲欧美一区二区三区久久| 欧美视频在线免费看| 久久久久久久国产精品视频| 国产精品一区二区三区久久| 亚洲一区国产精品| 国产噜噜噜噜噜久久久久久久久| 欧美大片免费观看在线观看网站推荐| 亚洲美女av在线播放| 久久久久999| 国产精品免费一区豆花| 激情久久av一区av二区av三区| 欧洲日韩成人av| 亚洲精品自拍视频| 欧美日韩中文字幕在线视频| 在线播放亚洲激情| 日韩在线观看你懂的| 亚洲免费视频在线观看| 国产亚洲综合久久| 色悠久久久久综合先锋影音下载| 亚洲精品有码在线| 久热精品视频在线观看一区| 亚洲欧美激情精品一区二区| 国产啪精品视频网站| 亚洲免费av片| wwwwwwww亚洲| 日韩av中文字幕在线播放| 亚洲天堂av网| 国产日韩精品综合网站| 日本高清不卡的在线| 亚洲国产精品人人爽夜夜爽| 国产精品网红直播| 国产91在线播放精品91| 欧美日韩一区二区三区在线免费观看| 欧美日韩中文字幕日韩欧美| 黄色成人av在线| 欧美精品第一页在线播放| 色综合色综合久久综合频道88| 久久99久久亚洲国产| 欧美三级欧美成人高清www| 国产精品h片在线播放| 91av在线视频观看| 亚洲aⅴ男人的天堂在线观看| 黄网站色欧美视频| 亚洲国产91色在线| 日本久久久久久久久久久| 日本中文字幕成人| 亚洲欧美日韩国产中文专区| 中文字幕欧美国内| 精品视频—区二区三区免费| 亚洲一区国产精品| 岛国av一区二区三区| 国产一区二区免费| 日韩在线观看成人| 日韩成人av在线| 在线不卡国产精品| 欧美日韩国产区| 欧美成人午夜影院| 国产精品精品视频一区二区三区| 亚洲福利在线观看| 亚洲成人黄色在线| 午夜精品一区二区三区在线视| 国产一区香蕉久久| 国产精品99久久久久久久久| 高跟丝袜欧美一区| 国产精品扒开腿爽爽爽视频| 亚洲精品98久久久久久中文字幕| 国产精品精品视频| 日韩中文字幕免费| 这里只有精品丝袜| 国产精品∨欧美精品v日韩精品| 久久久亚洲福利精品午夜| 91精品国产综合久久香蕉的用户体验| 久久精品亚洲94久久精品| 一区二区三区日韩在线| 成人国产精品av| 精品毛片三在线观看| 日韩精品中文在线观看| 国产suv精品一区二区| 国产精品偷伦免费视频观看的| 68精品国产免费久久久久久婷婷| 日韩精品免费综合视频在线播放| 97视频在线观看成人| 国产日韩欧美影视| 中文字幕视频在线免费欧美日韩综合在线看| 国产97在线|亚洲| 日韩精品极品视频| 一本色道久久88亚洲综合88| 欧美成人剧情片在线观看| 欧美成人免费在线观看| 奇米影视亚洲狠狠色| 青青草原成人在线视频| 98午夜经典影视| 日本免费久久高清视频| 精品亚洲精品福利线在观看| 性色av一区二区三区| 伊人久久久久久久久久| 国产精品亚洲激情| 久久久久久久久久久成人| 美日韩在线视频| 亚洲视频第一页| 日本久久久久久久久久久| 91精品国产91久久久久福利| 欧美小视频在线| 国产精品激情av在线播放| 日韩精品电影网| 亚洲精品一区av在线播放| 久久黄色av网站| 亚洲精品一区二区网址| 欧美激情亚洲综合一区| 中文字幕日韩欧美在线| 成人两性免费视频| 国产精品中文久久久久久久| 欧美日韩激情视频| 姬川优奈aav一区二区| 亚洲欧美中文在线视频| 亚洲精品一区二区网址| 亚洲欧美成人网| 亚洲韩国日本中文字幕| 怡红院精品视频| 欧美激情性做爰免费视频| 亚洲日本中文字幕免费在线不卡| 91精品免费久久久久久久久| 国产精品专区一| 久久精品国产视频| 久久成人av网站| 亚洲自拍另类欧美丝袜| 欧美综合第一页| 国产一级揄自揄精品视频| 成人有码在线播放| 欧美激情成人在线视频| 精品国产成人在线|