[图的着色 搜索] P2819 图的m着色问题
Posted 鱼竿钓鱼干
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[图的着色 搜索] P2819 图的m着色问题相关的知识,希望对你有一定的参考价值。
P2819 图的m着色问题
题目
思路
样例的图
无项连通图,而且没有自环和重边,数据量比较小搜索暴力整一波
另外,从任意起点开始搜是不影响方案数的。
代码
// Problem: P2819 图的m着色问题
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P2819
// Memory Limit: 125 MB
// Time Limit: 1000 ms
// FishingRod
#include<bits/stdc++.h>
using namespace std;
#define endl "\\n"
typedef long long LL;
typedef pair<int,int> PII;
//#define MULINPUT
/*DATA & KEY
*/
int T;
const int N=105;
bool g[N][N];
int color[N];
int n,k,m;
int cnt;
void dfs(int u)
{
if(u>n)
{
cnt++;
return;
}
for(int i=1;i<=m;i++)//想要节点u涂上颜色i
{
bool flag=1;
for(int v=1;v<=u;v++)//检查一下u可不可以染色i,检查和已经填的有没有冲突,别写成v<=n
if(g[u][v]&&u!=v&&color[v]==i)//如果联通并且不是自环而且颜色相同
{
flag=0;
break;
}
if(flag)
{
color[u]=i;
dfs(u+1);
color[u]=1;
}
}
}
void solve(int C)
{
//NEW DATA CLEAN
//NOTE!!!
cin>>n>>k>>m;
for(int i=1;i<=k;i++)
{
int u,v;cin>>u>>v;
g[u][v]=g[v][u]=true;
}
dfs(1);
cout<<cnt<<endl;
}
int main()
{
#ifdef MULINPUT
scanf("%d",&T);
for(int i=1;i<=T;i++)solve(i);
#else
solve(1);
#endif
return 0;
}
以上是关于[图的着色 搜索] P2819 图的m着色问题的主要内容,如果未能解决你的问题,请参考以下文章