uva 193 Graph Coloring
2013-10-25 16:48
302 查看
用回溯法枚举n个节点可能的黑白组合,图的遍历不一定非要按照邻接的节点进行dfs,回溯的条件是,即使接下来所有没有访问的节点都涂黑色,也不可能比当前全局的最多黑色节点数目多,就进行回溯。
#include <stdio.h> #include <vector> #include <algorithm> using namespace std; #define BLACK 0 #define WHITE 1 bool link_table[200][200]; int color[200]; vector<int> black_nodes; int max_black_node_num; void dfs(int cur, int max_pos, int last_black_num) { if(last_black_num + (max_pos-cur+1) <= max_black_node_num) return; if(cur == max_pos+1) { max_black_node_num = last_black_num; black_nodes.clear(); for(int i=1; i<=max_pos; i++) if(color[i] == BLACK) black_nodes.push_back(i); return; } if(cur == 1) { color[cur] = BLACK; dfs(cur+1, max_pos, last_black_num+1); color[cur] = WHITE; dfs(cur+1, max_pos, last_black_num); } else { bool f; int i; f = true; for(i=1; i<=cur-1; i++) if(link_table[cur][i] && color[i]==BLACK) { f = false; break; } if(f) { color[cur] = BLACK; dfs(cur+1, max_pos, last_black_num+1); } color[cur] = WHITE; dfs(cur+1, max_pos, last_black_num); } } void func(int n) { int i; max_black_node_num = 0; dfs(1, n, 0); printf("%d\n", max_black_node_num); for(i=0; i<black_nodes.size()-1; i++) printf("%d ", black_nodes[i]); printf("%d\n", black_nodes[i]); } int main(void) { int N, n, k, i, j; int a, b; //freopen("input.dat", "r", stdin); //freopen("output.dat", "w", stdout); scanf("%d", &N); while(N--) { scanf("%d %d", &n, &k); for(i=1; i<=n; i++) { for(j=1; j<=n; j++) link_table[i][j] = false; } for(i=1; i<=k; i++) { scanf("%d %d", &a, &b); link_table[a][b] = link_table[b][a] = true; } func(n); } return 0; }
相关文章推荐
- UVa 193 - Graph Coloring
- UVA 193 Graph Coloring
- uva - 193 Graph Coloring(回溯)
- UVa 193 - Graph Coloring
- uva193 - Graph Coloring
- uva 193 Graph Coloring(回溯)
- UVa 193 - Graph Coloring
- uva 193 Graph Coloring
- UVA - 193 Graph Coloring(回溯)
- UVA - 193 Graph Coloring
- uva 193 - Graph Coloring
- UVA - 193 Graph Coloring
- UVA 193 Graph Coloring
- uva 193 Graph Coloring( 图染色 ) DFS+回溯
- UVA 193 - Graph Coloring
- uva 193 Graph Coloring(DFS)
- UVA 193 - Graph Coloring
- uva 193 - Graph Coloring
- poj 1419 Graph Coloring uva 193 - Graph Coloring (图着色问题,dfs)
- UVa 193 - Graph Coloring(graph theory, brute force, backtracking, NP-complete, maximum independent set.)