您的位置:首页 > 其它

UVA 193 Graph Coloring

2016-08-27 19:19 351 查看

UVA 193 Graph Coloring

题目大意:几个点,连线,给点涂色,相邻俩点不能同时为黑色,白色可以随便图,求出黑色点最多的涂法

解题思路:回溯涂色

#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
int n, m;
int con[110][110];
int col[110];
int col2[110];
int s;
void dfs(int a, int b) {
if(a > n) {
if(b > s) {
s = b;
int j = 0;
for(int i = 0; i <= n; i++) {
if(col[i] == 1)
col2[j++] = i;
}
}
return;
}
int g = 0;
for(int i = 1; i <= n; i++) {
if(con[i][a] == 1 && col[i] == 1) {
g = 1;
break;
}
}
if(!g) {
col[a] = 1;
dfs(a+1, b+1);
col[a] = 0;
}
dfs(a+1, b);
}
int main() {
int x;
cin >> x;
while(x--) {
memset(col, 0, sizeof(col));
memset(con, 0, sizeof(con));
s = 0;
cin >> n >> m;
for(int i = 0; i < m; i++) {
int p, q;
cin >> p >> q;
con[p][q] = 1;
con[q][p] = 1;
}
dfs(1, 0);
printf("%d\n", s);
for(int i = 0; i < s; i++) {
cout << col2[i];
if(i != s - 1)
printf(" ");
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  uva