zoukankan      html  css  js  c++  java
  • UVA 193 Graph Coloring 图染色 DFS 数据

    题意:图上的点染色,给出的边的两个点不能都染成黑色,问最多可以染多少黑色。

    很水的一题,用dfs回溯即可。先判断和当前点相连的点是否染成黑色,看这一点是否能染黑色,能染色就分染成黑色和白色两种情况递归,如果不能就单递归白色。

    代码:

    #include <cstdio>
    #include <cstring>
    const int maxn = 110;
    int cas, v, e, M;
    bool g[maxn][maxn];
    int color[maxn], rec[maxn];
    
    void dfs(int p, int black) {
    	if (p > v) {
    		if (M < black) {
    			M = black;
    			for (int i = 1; i <= v; i++)
    				rec[i] = color[i];
    		}
    		return;
    	}
    	//judge if can color
    	for (int i = 1; i <= v; i++)
    		if (g[p][i] && color[i]) {
    			dfs(p + 1, black);		//can't color black, color white and return
    			return;
    		}
    	color[p] = 1;
    	dfs(p + 1, black + 1);		//can color black
    	color[p] = 0;
    	dfs(p + 1, black);			//can color white
    }
    
    int main() {
    	scanf("%d", &cas);
    	while (cas--) {
    		M = 0;
    		scanf("%d%d", &v, &e);
    		memset(g, 0, sizeof(g));
    		for (int i = 0; i < e; i++) {
    			int a, b;
    			scanf("%d%d", &a, &b);
    			g[a][b] = g[b][a] = 1;
    		}
    		dfs(1, 0);
    		printf("%d
    ", M);
    		int cnt = 0;
    		for (int i = 1; i <= v; i++)
    			if (rec[i]) {
    				if (++cnt != M)
    					printf("%d ", i);
    				else
    					printf("%d
    ", i);
    			}
    	}
    	return 0;
    }

    Input:

    4
    
    5 0
    
    8 4
    1 2
    3 4
    5 6
    6 8
    
    2 1
    1 2
    
    20 19 
    1 10 
    2 5 
    3 4 
    4 9 
    5 17 
    6 4 
    8 19 
    9 13 
    10 11 
    11 14 
    12 1 
    13 6 
    14 3 
    15 4 
    16 5 
    17 8 
    18 9 
    19 15 
    20 4 



    Output:

    5
    1 2 3 4 5
    5
    2 4 5 7 8
    1
    2
    11 
    1 2 3 6 7 8 9 11 15 16 20 


  • 相关阅读:
    响应式注意要添加“视口”约束标记---viewport
    js检测浏览器屏幕宽度
    Fragment中退出报错异常
    ListView和Gridview与滚动冲突解决
    APK反编译
    走出来,就要扛住
    与设备无法进行调试怎么走
    OC基础-protocol
    OC基础-变量可见对与方法
    OC基础-面向对象编程简介
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3239139.html
Copyright © 2011-2022 走看看