UVA 193 Graph Coloring

 

练习DFS。

 

CODE:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define MAXN 102
using  namespace std;

const  int M =  1001;
const  int INF =  0X3F3F3F3F;
int G[M][M];
bool color[M], save[M];
int MAX;
int n, m;

int check( int u)
{
     for( int v =  1; v <= n; v++)
    {
         if(G[u][v] && color[v])
             return  0;
    }
     return  1;
}

void dfs( int u,  int sum)
{
     if(u > n)
    {
         if(MAX < sum)
        {
            MAX = sum;
            memcpy(save, color,  sizeof(color));
        }
         return ;
    }
     if(n-u+ 1+sum <= MAX)  return ;        //剪枝
     if(check(u))
    {
        color[u] =  1;
        dfs(u+ 1, sum+ 1);
        color[u] =  0;
    }
    dfs(u+ 1, sum);
}

void init()
{
    memset(G,  0sizeof(G));
    memset(color,  0sizeof(color));
}

int main()
{
     int T, flag;
    scanf( " %d ", &T);
     while(T--)
    {
        init();
        flag =  1;
        scanf( " %d%d ", &n, &m);
         while(m--)
        {
             int u, v;
            scanf( " %d%d ", &u, &v);
            G[u][v] = G[v][u] =  1;
        }
        MAX = -INF;
        dfs( 10);
        printf( " %d\n ", MAX);
         for( int i =  1; i <= n; i++)
         if(flag && save[i])
        {
            printf( " %d ", i);
            flag =  0;
        }
         else  if(save[i])
        {
            printf( "  %d ", i);
        }
        printf( " \n ");
    }
     return  0;
}

 

 

你可能感兴趣的:(color)