【解题报告】【HDOJ1233】【最小生成树】还是畅通工程

http://acm.hdu.edu.cn/showproblem.php?pid=1233

prim最小生成树

 1 #include<stdio.h>
 2 #include<string.h>
 3 #define INF 0x3f3f3f3f
 4 #define min(a,b) (a>b?b:a)
 5 
 6 long int map[101][101];
 7 long int n,m;
 8 int set[101];
 9 long int sum;
10 void prim_init()
11 {
12     int i,a,b,c;
13     memset(map,INF,sizeof(map));//矩阵初始化
14     memset(set,0,sizeof(set));
15     
16     m=n*(n-1)/2;//读取m条路
17     for(i=0;i<m;i++)
18     {
19         scanf("%ld%ld%ld",&a,&b,&c);
20         map[a][b]=min(map[a][b],c);
21         map[b][a]=map[a][b];
22     }
23     
24     set[1]=1;//把第一点放进集合内
25     sum=0;
26 }
27 
28 void prim()
29 {
30     int t=INF,tt,i,j;
31     for(i=1;i<=n;i++){
32         if(set[i])
33             for(j=1;j<=n;j++)
34                 if(i!=j&&!set[j])
35                     if(map[i][j]<t){
36                         tt=j;
37                         t=map[i][j];
38                     }
39     }
40     sum+=t;
41     set[tt]=1;                    
42 }
43 
44 int main()
45 {
46     int i;
47     //freopen("1.txt","r",stdin);
48     while(scanf("%ld",&n)!=EOF&&n)
49     {
50         prim_init();
51         for(i=1;i<n;i++)
52             prim();
53         printf("%ld\n",sum);
54     }
55     return 0;
56 }

 

posted on 2012-07-21 18:32  coding封神  阅读(116)  评论(0编辑  收藏  举报

导航