算法设计与分析 实验十二 图的着色问题

问题

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

解析

从第一个点开始涂色,第一个涂的颜色一定是有效的,接着对下一个节点进行涂色,每次涂色从第一个颜色开始,判断该节点是否可以涂该种颜色,如果可以就通过该节点继续往下涂,如果不可以涂该颜色就停止继续往下涂,换一种颜色继续涂色,直至所有节点都涂色完成。算法设计与分析 实验十二 图的着色问题_第1张图片

核心代码

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)

源码

github源码

你可能感兴趣的:(算法设计与分析 实验十二 图的着色问题)