UVa 193 - Graph Coloring
2016-04-15 14:24
344 查看
題目:給一個有向圖染色,每個節點可以染成黑色或者白色,相鄰的節點不能同時染成黑色,
問最多能有多少個黑色節點,并輸出;
分析:圖論、搜索。直接按順序枚舉接節點,回溯計算即可,最大團╮(╯▽╰)╭。
說明:忽略了每次去下一個節點是取不到終點的情況,WA了好幾次╮(╯▽╰)╭。
問最多能有多少個黑色節點,并輸出;
分析:圖論、搜索。直接按順序枚舉接節點,回溯計算即可,最大團╮(╯▽╰)╭。
說明:忽略了每次去下一個節點是取不到終點的情況,WA了好幾次╮(╯▽╰)╭。
#include <cstring> #include <cstdio> int maps[105][105], save[105], color[105], ans; void dfs(int s, int n, int c) { if (s > n) { if (ans < c) { ans = c; for (int j = 1; j <= n; ++ j) save[j] = color[j]; } return; } for (int i = s; i <= n; ++ i) if (!color[i]) { color[i] = i; for (int j = 1; j <= n; ++ j) if (maps[i][j] && color[j] == 0) color[j] = i; int now = i+1;//防止不能到达终点 while (color[now]) now ++; dfs(now, n, c+1); for (int j = 1; j <= n; ++ j) if (color[j] == i) color[j] = 0; } } int main() { int m, n, k, v, u; while (~scanf("%d",&m)) while (m --) { scanf("%d%d",&n,&k); memset(maps, 0, sizeof(maps)); memset(color, 0, sizeof(color)); for (int i = 1; i <= k; ++ i) { scanf("%d%d",&v,&u); maps[v][u] = maps[u][v] = 1; } ans = 0; dfs(1, n, 0); printf("%d\n",ans); int start = 0; for (int i = 1; i <= n; ++ i) { if (save[i] == i) { if (start) printf(" "); start = 1; printf("%d",i); } } puts(""); } return 0; }
相关文章推荐
- 新站冲击百度前十排名的“投票战略”
- 来谈谈C++ 位运算 & | << >> ^ ~ %
- 数字证书原理(ssl,https)
- LInux 解压缩文件
- js监听浏览器关闭
- CALayer简介
- 致新手:百度下拉框暗藏的SEO秘诀
- Python3.4中filter函数,map函数和reduce函数
- SQL SERVER CAST 和 CONVERT 函数
- yii根据id查询一条数据
- nginx信号的实现
- cocoaPods 安装第三库出现错误(target overrides the `USER_HEADER_SEARCH_PATHS` build setting defined in `Pods/)
- VS2010 使用命令行编译的方法
- 64位win7 上常用软件安装
- js获取鼠标移动时的坐标
- 【慕课笔记】5-2 四种XML解析方式大PK—四种解析方式解析速度分析
- 网页授权提示该链接无法访问
- Git如何回滚版本
- mongodb morphia关联查询一例
- 挖掘百度前十竞争对手的致命弱点