问题
图的m着色问题。给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求G的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答“NO”。
解析
从第一个点开始涂色,第一个涂的颜色一定是有效的,接着对下一个节点进行涂色,每次涂色从第一个颜色开始,判断该节点是否可以涂该种颜色,如果可以就通过该节点继续往下涂,如果不可以涂该颜色就停止继续往下涂,换一种颜色继续涂色,直至所有节点都涂色完成。
核心代码
public static void search(int point){
if(point>n){
for(int i=1;i<=n;i++){
System.out.print(color[i] + " ");
}
count++;
System.out.println();
}
else{
for(int i=1;i<=m;i++){
color[point]=i;
if(isPainted(point)) {
search(point+1);
}
color[point]=0;
}
}
}
分析
时间复杂度为T=O(nm^n)