POJ_1258_Agri-Net(最小生成树 Prim)
还是注意初始化和数组的大小。跟前几题没什么区别。
1 # include <stdio.h> 2 # include <string.h> 3 # define inf 100010 4 int map[120][120]; 5 int m; 6 int Prim() 7 { 8 int low[120]; 9 int visit[120]={0}; 10 int i,j,k=1; 11 int s=1; 12 int point; 13 int min; 14 int sum=0; 15 for(i=1;i<=m;i++) 16 low[i]=inf; 17 visit[s]=1; 18 while(1) 19 { 20 if(k == m) 21 break; 22 min=inf; 23 for(j=2;j<=m;j++) 24 { 25 if(!visit[j] && low[j] > map[s][j]) 26 low[j]=map[s][j]; 27 if(!visit[j] && min>low[j]) 28 { 29 min=low[j]; 30 point=j; 31 } 32 } 33 sum+=min; 34 s=point; 35 visit[s]=1; 36 k++; 37 } 38 return sum; 39 } 40 int main() 41 { 42 int i,j,k; 43 while(scanf("%d",&m) != EOF) 44 { 45 46 for(i=1;i<=m;i++) 47 { 48 for(j=1;j<=m;j++) 49 { 50 scanf("%d",&map[i][j]); 51 } 52 } 53 printf("%d\n",Prim()); 54 } 55 return 0; 56 }