kruskal

 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  */

猜你喜欢

转载自www.cnblogs.com/wangxuelin/p/9030929.html