http://poj.org/problem?id=2485
求最小生成树中最长的那个边
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #define INF 0x0fffffff 5 int N,T; 6 int mat[502][502]; 7 int prim() 8 { 9 int start=0; 10 bool visited[502]={false}; 11 int nearest[502]; 12 int max_len=-1; 13 int min,pos; 14 int i,j; 15 for(i=0;i<=N;i++) 16 nearest[i]=mat[start][i]; 17 visited[start]=true; 18 nearest[start]=0; 19 for(i=1;i<N;i++) { 20 min=INF; 21 for(j=0;j<N;j++) { 22 if(!visited[j]&&nearest[j]<min) { 23 min=nearest[j]; 24 pos=j; 25 } 26 } 27 visited[pos]=true; 28 if(min>max_len) 29 max_len=min; 30 for(j=0;j<N;j++) 31 if(!visited[j]&&nearest[j]>mat[pos][j]) 32 nearest[j]=mat[pos][j]; 33 } 34 return max_len; 35 } 36 37 int main() 38 { 39 scanf("%d",&T); 40 while(T--) { 41 scanf("%d",&N); 42 int i,j; 43 for(i=0;i<N;i++) 44 for(j=0;j<N;j++) 45 scanf("%d",&mat[i][j]); 46 printf("%d\n",prim()); 47 } 48 return 0; 49 }