最小生成树 HDU1233

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 #include <queue>
 6 
 7 using namespace std;
 8 
 9 int map[110][110];
10 bool vis[110];
11 int div1[110];
12 int MAX=1<<29;
13 
14 int main()
15 {
16     int n;
17     while(scanf("%d",&n)!=EOF)
18     {
19         if(n==0)
20             break;
21         int a,b,c;
22         int ans=0;
23         for(int i=1;i<=n;i++)
24             map[i][i]=0;
25         for(int i=1;i<=n*(n-1)/2;i++)
26         {
27             scanf("%d%d%d",&a,&b,&c);
28             map[a][b]=map[b][a]=c;
29         }
30         for(int i=1;i<=n;i++)
31         {
32             div1[i]=map[1][i];
33             vis[i]=false;
34         }
35         div1[1]=0;
36         for(int i=1;i<=n;i++)
37         {
38             int mi=MAX;
39             int v;
40             for(int j=1;j<=n;j++)
41             {
42                 if(!vis[j]&&div1[j]<mi)
43                 {
44                     mi=div1[j];
45                     v=j;
46                 }
47             }
48             vis[v]=true;
49             ans+=mi;
50             for(int j=1;j<=n;j++)
51             {
52                 if(!vis[j]&&div1[j]>map[v][j])
53                 {
54                     div1[j]=map[v][j];
55                 }
56             }
57         }
58         cout<<ans<<endl;
59     }
60     return 0;
61 }
View Code
原文地址:https://www.cnblogs.com/wsruning/p/4758233.html