码迷,mamicode.com
首页 > 其他好文 > 详细

kruskal

时间:2018-05-13 10:45:19      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:iostream   algorithm   ++   \n   string   print   测试   str   style   

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <string>
 4 #include <algorithm>
 5 #include <stack>
 6 #include <cstring>
 7 #include <queue>
 8 using namespace std;
 9 
10 const int maxn=100;
11 int parent[maxn];
12 int n,m;
13 int i,j;
14 
15 struct edge
16 {
17     int u,v,w;
18 }edges[maxn];
19 
20 int find(int i){
21     int temp;
22     for(temp = i; parent[temp] >= 0; temp = parent[temp]);
23     while(temp != i){
24         int t = parent[i];
25         parent[i] = temp;
26         i = t;
27     }
28     return temp;
29 }
30 
31 void merge(int a,int b){
32     int r1 = find(a);
33     int r2 = find(b);
34     parent[r1]=r2;
35 }
36 
37 void kruskal(){
38     int sumWeight = 0;
39     int num = 0;
40     int u,v;
41     for(i=1; i<=n; i++) parent[i] = -1;    for(int i=0; i<m; i++)
42     {
43         u = edges[i].u;
44         v = edges[i].v;
45         
46         if(find(u) != find(v)){
47             printf("%d-%d\n", u,v);
48             sumWeight += edges[i].w;
49             num ++;
50             merge(u, v);
51         }
52     }
53     printf("weight of MST is %d \n", sumWeight);
54 }
55 
56 int cmp(const edge a, const edge  b){
57     return a.w < b.w;
58 }
59 
60 int main() {
61     cin>>n>>m;
62     for(i=0; i<m; i++){
63         cin>>edges[i].u>>edges[i].v>>edges[i].w;
64     }
65     sort(edges,edges+m,cmp);
66     kruskal();
67     
68     
69     return 0;
70 }
71 /*
72  测试数据:
73  7 9
74  1 2 28
75  1 6 10
76  2 3 16
77  2 7 14
78  3 4 12
79  4 5 22
80  4 7 18
81  5 6 25
82  5 7 24
83  输出:
84  1-6
85  3-4
86  2-7
87  2-3
88  4-5
89  5-6
90  weight of MST is 99
91  */

 

kruskal

标签:iostream   algorithm   ++   \n   string   print   测试   str   style   

原文地址:https://www.cnblogs.com/wangxuelin/p/9030929.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!