POJ 1789 Truck History

POJ 1789 Truck History
MST问题。
以下是我的代码:
#include < iostream >
#include
< string >
#include
< cstdio >
using   namespace  std;
const   int  kMaxn( 2007 );
const   int  kInf( 0x7f7f7f7f );

int  n,g[kMaxn][kMaxn];
string  name[kMaxn];
int  mst,lowcost[kMaxn];

int  dist( int  a, int  b)
{
    
int  re( 0 );
    
for ( int  i = 0 ;i < 7 ;i ++ )
        
if (name[a][i] != name[b][i])
            re
++ ;
    
return  re;
}

void  Prim()
{
    mst
= 0 ;
    
for ( int  i = 1 ;i <= n;i ++ )
        lowcost[i]
= g[ 1 ][i];
    lowcost[
1 ] =- 1 ;
    
for ( int  i = 1 ;i <= n - 1 ;i ++ )
    {
        
int  v( - 1 ),w(kInf);
        
for ( int  j = 1 ;j <= n;j ++ )
            
if (lowcost[j] !=- 1   &&  w > lowcost[j])
            {
                v
= j;
                w
= lowcost[j];
            }
        
if (v !=- 1 )
        {
            mst
+= w;
            lowcost[v]
=- 1 ;
            
for ( int  j = 1 ;j <= n;j ++ )
                
if (lowcost[j] !=- 1   &&  lowcost[j] > g[v][j])
                    lowcost[j]
= g[v][j];
        }
    }
}

int  main()
{
    
/*
    freopen("data.in","r",stdin);
    freopen("data.out","w",stdout);
    //
*/

    
while (cin >> &&  n)
    {
        
for ( int  i = 1 ;i <= n;i ++ )
            cin
>> name[i];
        
for ( int  i = 2 ;i <= n;i ++ )
            
for ( int  j = 1 ;j <= i - 1 ;j ++ )
                g[i][j]
= g[j][i] = dist(i,j);

        Prim();

        printf(
" The highest possible quality is 1/%d.\n " ,mst);
    }

    
return   0 ;
}

你可能感兴趣的:(POJ 1789 Truck History)