#include  < stdio.h >
#include 
< string .h >
#include 
< limits.h >

#define   N  110

int   n,result;
int   map[N][N];
bool  visite[N];
int   dis[N];

void   Prim()
{
    memset( visite, 
false sizeof (visite) );
    visite[
0 ] =   true ;  result =   0 ;
    
    
for int  i =   0 ; i <  n;  ++ i )  dis[i] =  map[ 0 ][i];
    
    
for int  i =   1 ; i <  n;  ++ i )
    
{
        
int  min =  INT_MAX, k;
        
        
for int  j =   0 ; j <  n;  ++ j )
        
if ! visite[j]  &&  dis[j] <  min ) min =  dis[j], k =  j;
        
        visite[k]
=   true ;  result +=  dis[k];
        
for int  j =   0 ; j <  n;  ++ j )
        
if ! visite[j]  &&  map[k][j] >   0   &&  map[k][j] <  dis[j] ) 
              dis[j]
=  map[k][j];
    }

}


int  main()
{
    
while ( scanf( " %d " , & n) !=  EOF )
    
{
        
for int  i =   0 ; i <  n;  ++ i )
           
for int  j =   0 ; j <  n;  ++ j )
           scanf(
" %d " & map[i][j] );
           
        Prim();
        printf(
" %d\n " , result );
    }

    
    
return   0 ;
}

    
posted on 2008-11-05 16:30 Darren 阅读(239) 评论(0)  编辑 收藏 引用 所属分类: 图论

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理