7-8 图着色问题(25 分)
来源:互联网 发布:mac 远程vps 编辑:程序博客网 时间:2024/05/22 15:15
题目链接
图着色问题是一个著名的NP完全问题。给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色?
但本题并不是要你解决这个着色问题,而是对给定的一种颜色分配,请你判断这是否是图着色问题的一个解。
输入格式:
输入在第一行给出3个整数V(0<V≤500)、E(≥0)和K(0<K≤V),分别是无向图的顶点数、边数、以及颜色数。顶点和颜色都从1到V编号。随后E行,每行给出一条边的两个端点的编号。在图的信息给出之后,给出了一个正整数N(≤20),是待检查的颜色分配方案的个数。随后N行,每行顺次给出V个顶点的颜色(第i个数字表示第i个顶点的颜色),数字间以空格分隔。题目保证给定的无向图是合法的(即不存在自回路和重边)。
输出格式:
对每种颜色分配方案,如果是图着色问题的一个解则输出Yes,否则输出No,每句占一行。
输入样例:
6 8 3
2 1
1 3
4 6
2 5
2 4
5 4
5 6
3 6
4
1 2 3 3 1 2
4 5 6 6 4 5
1 2 3 4 5 6
2 3 4 2 3 4
输出样例:
Yes
Yes
No
No
#include<iostream>#include<cstring>#include<vector>#include<cstdio>#include<set>using namespace std;int mp[501][501];bool visited[501];int color[501];int k;void bfs(int start,int v){ int que[250003]; int head = 1,tail = 1; que[tail] = start; visited[start] = true; tail++; while(head<tail){ int tx = que[head]; for(int i = 1;i<=v;i++) if(mp[tx][i]){ if(color[tx]!=color[i]){ if(!visited[i]){//必须在最后进行判断,防止重复入队,卡dfs重新访问顶点的错误!!! que[tail] = i; visited[i] = true; tail++; } } else{ k = 0; break; } } if(!k) break; head++; } return;}int main(){ int v,e,nm; scanf("%d%d%d",&v,&e,&nm); for(int i = 0;i<e;i++){ int mt1,mt2; scanf("%d%d",&mt1,&mt2); mp[mt1][mt2] = mp[mt2][mt1] = 1; } int num; int a[501]; scanf("%d",&num); for(int i = 0;i<num;i++){ set <int> c; memset(a,0,sizeof(a)); k = 1; for(int j = 1;j<=v;j++){ int x; scanf("%d",&x); c.insert(x); color[j] = x; } if(c.size()!=nm)//如果颜色的个数不等于规定的个数 printf("No\n"); else{ memset(visited,false,sizeof(visited)); for(int i = 1;i<=v;i++){ if(!visited[i]) bfs(i,v); if(!k){ printf("No\n"); break; } } if(k) printf("Yes\n"); } } return 0;}
阅读全文
0 0
- 7-8 图着色问题(25 分)
- 7-1 图着色问题(25 分)
- 图着色问题 (转)
- poj 1129(图的着色问题)
- m-图着色问题(贪心解法)
- m图着色问题
- 区间图着色问题
- 区间图着色问题
- 回溯 图着色问题
- 图的着色问题
- 图的着色问题
- 图着色问题
- m图着色问题
- 图的着色问题
- 区间图着色问题
- 图着色问题
- 区间图着色问题
- 图最少着色问题
- 有关linux驱动学习
- javaScript遍历对象的属性值
- python模块系列之
- Spring源码-IOC(一)
- Javascript模块化编程:require.js的用法
- 7-8 图着色问题(25 分)
- Spring源码-IOC(二)
- java8新的时间日期库及使用示例
- Matlab 文件操作
- mxnet中,SGD(随机梯度下降)的参数momentum的用处
- 单例模式
- CentOS7的bash shell及显示绝对路径
- Java:String和Date、Timestamp之间的转换
- CSDN-Markdown的字体、字号、颜色编辑