洛谷P2819 图的m着色问题 题解 图上的搜索

题目链接:https://www.luogu.com.cn/problem/P2819
题目大意:求图的m着色方案数。
解题思路:用搜索枚举没一个点的颜色,如果n个点都染色且不冲突,则方案数+1。
实现代码如下:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 110;
vector<int> g[maxn];
int n, k, m, color[maxn], ans;
void dfs(int u) {
    if (u > n) {
        ans ++;
        return;
    }
    int sz = g[u].size();
    for (int c = 1; c <= m; c ++) {
        bool flag = true;
        for (int i = 0; i < sz; i ++) {
            int v = g[u][i];
            if (color[v] == c) {
                flag = false;
                break;
            }
        }
        if (flag) {
            color[u] = c;
            dfs(u+1);
            color[u] = 0;
        }
    }
}
int main() {
    cin >> n >> k >> m;
    while (k --) {
        int a, b;
        cin >> a >> b;
        g[a].push_back(b);
        g[b].push_back(a);
    }
    dfs(1);
    cout << ans << endl;
    return 0;
}
posted @ 2020-01-27 15:22  quanjun  阅读(183)  评论(0编辑  收藏  举报