码迷,mamicode.com
首页 > 其他好文 > 详细

图的着色问题

时间:2021-06-07 20:07:42      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:bool   说明   nbsp   连通图   font   backtrack   ++   连通   顶点   

1. 问题

给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色,是否有一种着色法使G中任意相邻的2个顶点着不同颜色

2. 解析

通过回溯的方法,不断的为每一个节点着色,在前面n-1个节点都合法的着色之后,开始对第n个节点进行着色,这时候枚举可用的m个颜色,通过和第n个节点相邻的节点的颜色,来判断这个颜色是否合法,如果找到那么一种颜色使得第n个节点能够着色,那么说明m种颜色的方案是可行的

3. 设计

bool Same(int t) {

for i to n

if c[t][i] == 1 && col[i] == col[t]

return false;

return true;

}

void BackTrack(int t) {

if t > n

sum++;

for i to n

printf(col[i]);

else

for i to m

col[t] = i;

if (Same(t))

BackTrack(t + 1);

col[t] = 0;

4. 分析

搜索树有1+m+.....+mn=mn+1-1 / m-1 <=2mn , m>2个节点,每个节点要和其他所有节点的颜色进行n-1次比较,Onmn

5. 源码

[github源码地址]

 

图的着色问题

标签:bool   说明   nbsp   连通图   font   backtrack   ++   连通   顶点   

原文地址:https://www.cnblogs.com/zs0618/p/14856845.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!