https://www.luogu.org/problem/show?pid=2819

题目背景

给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的。图的m着色问题是对于给定图G和m种颜色,找出所有不同的着色法。

题目描述

对于给定的无向连通图G和m种不同的颜色,编程计算图的所有不同的着色法。

输入输出格式

输入格式:

第1行有3个正整数n,k 和m,表示给定的图G有n个顶点和k条边,m种颜色。顶点编号为1,2,…,n。接下来的k行中,每行有2个正整数u,v,表示图G 的一条边(u,v)。

输出格式:

程序运行结束时,将计算出的不同的着色方案数输出。

输入输出样例

输入样例#1:

5 8 4
1 2
1 3
1 4
2 3
2 4
2 5
3 4
4 5

输出样例#1:

48

说明

n<=100;k<=2500;

在n很大时保证k足够大。

保证答案不超过20000。

 

 #include <algorithm>
#include <iostream> using namespace std; int n,k,m,fx,fy,ans;
int color[];
int burn[][]; bool judge(int x,int col)
{
//枚举每个点的染色情况
for(int i=;i<=n;i++)
{
//不看当前点
if(x==i) continue;
//两个点首先要连接,如果颜色相同的话,那么就无法染编号为i的颜色
if(burn[x][i]==&&color[i]==col)
return ;
}
//两点不连接或者连到的点颜色不与编号为i的点的颜色相同,就可以染色
return ;
} void DFS(int now)
{
//如果当前染够了n个点,退出,找下一个方案;;
if(now==n+)
{
ans++;
return ;
}
//枚举可以染上的颜色的编号
for(int i=;i<=m;i++)
{
//如果当前的点没有染色,就判断它是否可以染编号为i的颜色
if(!color[now]&&(judge(now,i)))
{
//染上枚举到的颜色
color[now]=i;
//染下一个点
DFS(now+);
//如果始终无法染够n个点,或者完成了一种方案,回溯;;
color[now]=;
}
}
} int main()
{
cin>>n>>k>>m;
for(int i=;i<=k;i++)
{
cin>>fx>>fy;
//首先,把图建出来;;;
burn[fx][fy]=burn[fy][fx]=;
}
DFS();
//从第一个点开始找;;
cout<<ans;
return ;
}

带解析

无解析:

#include <algorithm>
#include <iostream> using namespace std; int n,k,m,fx,fy,ans;
int color[];
int burn[][]; bool judge(int x,int col)
{
for(int i=;i<=n;i++)
{
if(x==i) continue;
if(burn[x][i]==&&color[i]==col)
return ;
}
return ;
} void DFS(int now)
{
if(now==n+)
{
ans++;
return ;
}
for(int i=;i<=m;i++)
{
if(!color[now]&&(judge(now,i)))
{
color[now]=i;
DFS(now+);
color[now]=;
}
}
} int main()
{
cin>>n>>k>>m;
for(int i=;i<=k;i++)
{
cin>>fx>>fy;
burn[fx][fy]=burn[fy][fx]=;
}
DFS();
cout<<ans;
return ;
}

最新文章

  1. 网络抓包wireshark(转)
  2. 【前端】js代码模拟用户键盘鼠标输入
  3. BZOJ 1010: [HNOI2008]玩具装箱toy 斜率优化DP
  4. Java当中的I/O的字符流
  5. UVA 12373 Pair of Touching Circles
  6. SVN理解
  7. asp.net 中使用不同的数据源绑定gridview
  8. LINQ Enumerable
  9. 利用谷歌 kaptcha 进行验证码生成
  10. GoF——抽象工厂模式
  11. Linux中more命令的实现
  12. Swift - 移除页面视图上的所有元素
  13. 超级密码 hdu1226 bfs
  14. 邓_html_选项卡
  15. 项目升级-oracle改版sql server问题点汇总
  16. Idea中一些常用设置
  17. vs2015第二次装安装不能选择路径问题解决方法
  18. ios外部链接或者app唤起自己的app
  19. SpringMvc + socket.io + vue + vue-socket.io实例
  20. Vue编写的todolist小例子

热门文章

  1. (六)SpringIoc之延时加载
  2. 学习笔记 第十二章 CSS3+HTML5网页排版
  3. greendao3.2.3配置时遇到的问题
  4. crontab安装及使用
  5. SQL Server中行列转置方法
  6. 字符串(String)几个常用方法的详解
  7. 扩展 IHttpModule
  8. asp.net的请求管道事件
  9. 安装Subversion1.82(SVN)
  10. JavaSE-06 二维数组