标签:bool 说明 nbsp 连通图 font backtrack ++ 连通 顶点
给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色,是否有一种着色法使G中任意相邻的2个顶点着不同颜色。
通过回溯的方法,不断的为每一个节点着色,在前面n-1个节点都合法的着色之后,开始对第n个节点进行着色,这时候枚举可用的m个颜色,通过和第n个节点相邻的节点的颜色,来判断这个颜色是否合法,如果找到那么一种颜色使得第n个节点能够着色,那么说明m种颜色的方案是可行的
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;
搜索树有1+m+.....+mn=mn+1-1 / m-1 <=2mn , m>2个节点,每个节点要和其他所有节点的颜色进行n-1次比较,O(nmn)
[github源码地址]
标签:bool 说明 nbsp 连通图 font backtrack ++ 连通 顶点
原文地址:https://www.cnblogs.com/zs0618/p/14856845.html