【图染色】POJ 1419 & UVA 193

来源:互联网 发布:服装连锁收款软件 编辑:程序博客网 时间:2024/05/01 16:09

暴力dfs,先假设全部为白色,然后枚举每个点,对每个点dfs乱搞,网上搜了下可以用最大团做,没见过,先放在这里,学会了再做一遍!

#define N 102int color[N];int g[N][N];int maxm,len;int n;int ans[N];int num;void dfs(int u){//0——白色,1——黑色    int i,j;    if(u == n+1){//注意处理要完所有点!        if(len>maxm){            maxm = len;            num = 0;            for(i=1;i<=n;i++){                if(color[i])ans[num++] = i;            }        }        return;    }    for(i=1;i<=n;i++){        if(g[u][i] && color[i])break;    }    if(i>n){//与该点相邻的点都是白色        color[u] = 1;        len++;        dfs(u+1);        color[u] = 0;        len--;    }    dfs(u+1);}int main(){    int t;    scanf("%d",&t);    while(t--){        int m;        scanf("%d%d",&n,&m);        int i,j;        memset(g,0,sizeof(g));        memset(color,0,sizeof(color));        while(m--){            int a,b;            scanf("%d%d",&a,&b);            g[a][b] = g[b][a] = 1;        }        maxm = 0;        len = 0;        dfs(1);        printf("%d\n",maxm);        printf("%d",ans[0]);        for(i=1;i<num;i++){            printf(" %d",ans[i]);        }        puts("");    }    return 0;}



















原创粉丝点击