博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷——P2819 图的m着色问题
阅读量:7117 次
发布时间:2019-06-28

本文共 1307 字,大约阅读时间需要 4 分钟。

P2819 图的m着色问题

题目背景

给定无向连通图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 41 21 31 42 32 42 53 44 5
输出样例#1:
48

说明

n<=100;k<=2500;

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

保证答案不超过20000。

 

#include
#include
#include
#include
#define N 500using namespace std;int n,m,k,x,y,ans,col[N],a[N][N];int read(){ int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){
if(ch=='-')f=-1; ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();} return x*f;}int pd(int x,int y){ for(int i=1;i<=n;i++) { if(i==x) continue; if(y==col[i]&&a[x][i]) return false; } return true;}void dfs(int x){ if(x>n){ans++; return ;} for(int i=1;i<=k;i++) { if(!col[x]&&pd(x,i)) { col[x]=i; dfs(x+1); col[x]=0; } }}int main(){ n=read(),m=read(),k=read(); for(int i=1;i<=m;i++) x=read(),y=read(),a[x][y]=a[y][x]=1; dfs(1); printf("%d",ans); return 0;}

 

转载于:https://www.cnblogs.com/z360/p/7573744.html

你可能感兴趣的文章
rdc第四天
查看>>
关于 Android studio 在xml中不提示的问题
查看>>
Spring系列之AOP分析开篇(一)
查看>>
关于Android中多module使用fat-aar合并的坑
查看>>
同时兼容iOS、Android、微信小程序的UI引擎
查看>>
KVC的取值赋值
查看>>
Vue2.x+axios+iview+mui带你撸一个App
查看>>
首屏预渲染方案
查看>>
Day7:html和css
查看>>
什么是 5G?它比 4G 好在哪里?
查看>>
Handler源码剖析
查看>>
微服务监控神器Prometheus的安装部署
查看>>
java常用多线程创建方式
查看>>
【刘文彬】【精解】EOS标准货币体系与源码实现分析
查看>>
MySQL入门系列:数据的插入、删除和更新
查看>>
小程序导出朋友圈海报详细记录
查看>>
dubbo集群之Cluster模块
查看>>
centOS7 安装Git
查看>>
css3打包后自动追加前缀插件:autoprefixer
查看>>
移动端反馈样式
查看>>