【解题报告】【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 }