UVA 193 Graph Coloring

来源:互联网 发布:大学生简历 知乎 编辑:程序博客网 时间:2024/04/28 01:55

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;}
0 0