图的着色问题

1、问题

图的m着色问题。给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求G的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答“NO”。

2、解析

在填写每一个顶点的颜色时检查与相邻已填顶点的颜色是否相同。如果不同,则填上;如果相同(冲突),则另选一种;如果已没有颜色可供选择,则回溯到上一顶点。重复这一过程,直到所有顶点的颜色都已填上。

决策树如下:

3、设计

 1 void GraphColor(int step)  
 2     if step==n+1
 3         for  i <- 1 to n
 4             printf("%d ",color[i])
 5         count<-count+1
 6         return 
 7     else
 8         for  i=1 to m
 9             color[step]=i
10             if Check(step)==1 
11                 GraphColor(step+1)
12             color[step]=0
13         
14     

 

4、分析

搜索树有:1+m+m'+...+m"=(m^(n+1)-1)/(m-1)<=(m^(n+1))/(m/2)=2*m"   m>=2个结点

每个节点要和其他所有顶点的颜色进行比较,进行n-1次比较最坏时间复杂度为O(nm")

5、源码

https://github.com/ChenyuWu0705/Algorithm-Analyze-and-Design/blob/main/Graph%20color.cpp

posted @ 2021-06-08 21:34  programmer_w  阅读(251)  评论(0)    收藏  举报