poj 2485 Highways (prim)

题不难,题目很难...

读了好几遍还是给理解错了,纠结!

就是求最小生成树里最大的边权值,拿过来poj1287一改就交,果断WA..仔细一看,权值的更新给搞错了,这是要让我郁闷到极点啊!

#include<cstdio>
#define Max(a, b)   a>b?a:b
#define Min(a, b)   a>b?b:a
using  namespace std ;
int map[ 505][ 505] ;
int dis[ 505] ;
int n ;
int prim(){
     int i, j, ans =  0, x =  1 ;
     for(j= 1; j<=n; j++)
        dis[j] = map[x][j] ;
     for(i= 2; i<=n; i++){
         int min =  65537 ;
         for(j= 1; j<=n; j++){
             if(min>dis[j]&&dis[j]!= 0){
                min = dis[j] ;
                x = j ;
            }
        }
        dis[j] =  0 ;
        ans = Max(ans, min) ;
         for(j= 1; j<=n; j++)
            dis[j] = Min(dis[j], map[x][j]) ;
    }
     return ans ;
}
int main(){
     int t, i, j, ans ;
    scanf( " %d ", &t) ;
     while(t--){
        scanf( " %d ", &n) ;
         for(i= 1; i<=n; i++)
             for(j= 1; j<=n; j++)
                scanf( " %d ", &map[i][j]) ;
        ans = prim() ;
        printf( " %d\n ", ans) ;
    }
     return  0 ;

} 

你可能感兴趣的:(Prim)