PKU 1129 Channel Allocation

/*
暴搜
*/

#include 
< iostream >
using   namespace  std;

bool  G[ 26 ][ 26 ];
int  CL[ 26 =  { 0 };
int  N;

bool  dfs( int  k,  int  m)
{
    
int  i, j;
    
bool  flag;
    
for  (i  =   0 ; i  <  m; i ++ )
    {
        
for  (flag  =   true , CL[k]  =  i, j  =   0 ; j  <  k; j ++ )
            
if  (G[k][j]  &&  CL[k]  ==  CL[j])
            {
                flag 
=   false ;
                
break ;
            }
        
if  (flag  &&  (k  ==  N - 1   ||  dfs(k + 1 , m)))
            
return   true ;
    }
    
return   false ;
}

int  main()
{
    
int  i, j, t;
    
bool  conn;
    
char  str[ 50 ];
    
    
while  (scanf( " %d " & N)  &&  N)
    {
        memset(G, 
0 sizeof (G));
        
for  (conn  =   false , i  =   0 ; i  <  N; i ++ )
            
for  (scanf( " %s " , str), j  =   2 ; str[j]; j ++ , conn  =   true )
            {
                t 
=  str[j]  -   ' A ' ;
                G[i][t] 
=   true ;
                G[t][i] 
=   true ;
            }
        
if  ( ! conn)
            printf(
" 1 channel needed.\n " );
        
else   if  (dfs( 1 2 ))
            printf(
" 2 channels needed.\n " );
        
else   if  (dfs( 1 3 ))
            printf(
" 3 channels needed.\n " );
        
else
            printf(
" 4 channels needed.\n " );
    }
    
return   0 ;
}

你可能感兴趣的:(location)