pintia天梯赛--搜索 --图着色问题

7-11 图着色问题 (25分)

图着色问题是一个著名的NP完全问题。给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色?

但本题并不是要你解决这个着色问题,而是对给定的一种颜色分配,请你判断这是否是图着色问题的一个解。
输入格式:

输入在第一行给出3个整数V(0 输出格式:

对每种颜色分配方案,如果是图着色问题的一个解则输出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

注意:
颜色个数需要等于k
结点以及颜色编号从1开始
但每种颜色分配方案的颜色编号不一定从1开始

#include 
#include int ee[505][505]={0};
//颜色个数
int main()
{int v,e,k,i,j,t,n;scanf("%d%d%d",&v,&e,&k);for(i=0; i<e; i++){int x,y;scanf("%d%d",&x,&y);ee[x][y]=ee[y][x]=1;}scanf("%d",&n);for(t=0; t<n; t++){int dis[505]={0}; //颜色int co[505]={0};int f=0,cnt=0;for(j=1; j<=v; j++){int x;scanf("%d",&x);co[x]++;dis[j]=x;}for(i=1; i<=504; i++){if(co[i]) cnt++;}for(i=1; i<=v; i++){for(j=1; j<=v; j++){if(ee[i][j]==1){if(dis[i]==dis[j]) f=1;}}}if(f||cnt!=k) printf("No\n");else printf("Yes\n");}return 0;
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部