题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1102
prim最小生成树
1 #include<stdio.h> 2 #include<String.h> 3 #define INF 0x3f3f3f3f 4 int map[105][105]; 5 int set[105]; 6 int sum; 7 int n; 8 void prim(){ 9 int t=INF,tt,i,j; 10 for(i=1;i<=n;i++){ 11 if(set[i]) 12 for(j=1;j<=n;j++) 13 if(!set[j]) 14 if(j!=i&&map[i][j]<t){ 15 t=map[i][j]; 16 tt=j; 17 } 18 } 19 sum+=t; 20 set[tt]=1; 21 } 22 int main(){ 23 int i,j,Q,a,b; 24 //freopen("1.txt","r",stdin); 25 while(scanf("%d",&n)!=EOF) 26 { 27 for(i=1;i<=n;i++){ 28 for(j=1;j<=n;j++){ 29 scanf("%d",&map[i][j]); 30 map[j][i]=map[i][j]; 31 }//end for j 32 set[i]=0; 33 }//end for i 34 scanf("%d",&Q); 35 for(i=0;i<Q;i++){ 36 scanf("%d%d",&a,&b); 37 map[a][b]=map[b][a]=0; 38 }//end for i 39 set[1]=1; 40 sum=0; 41 for(i=1;i<n;i++) 42 prim(); 43 printf("%d\n",sum); 44 } 45 return 0; 46 }