算法分析与实践-作业12-图的着色问题

1. 问题

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

2. 解析

设G有n个顶点,将顶点编号为1,2,…,n,则搜索空间为深度n的m叉完全树,将颜色编号为1,2,…,m,结点(x_1,x_2,…,x_k∈{1,…,m}),1≤k≤n表示顶点1的颜色x_1, 顶点2的颜色x_2,…,顶点k的颜色x_k

3. 设计

if (t > n)
	{
		//当最后一个点被着色后,此时i大于n,即所有点已染色完成
		//打印出此种方案的结果
	}
	else
	{
		//开始给一个点添加颜色,同时判断其可行性,
		for (int i = 1; i <= m; i++)
		{
			//给改点图上m号颜色
			//若此种颜色可行,即执行进行深层次的着色
			//将该点恢复到原来的状态
		}
	}

4. 分析

时间复杂度O(nm^n)

5. 源码

https://github.com/QAQnoname/homework/blob/master/%E4%BD%9C%E4%B8%9A12/%E5%9B%BE%E7%9A%84%E7%9D%80%E8%89%B2%E9%97%AE%E9%A2%98.cpp

你可能感兴趣的:(算法分析与实践-作业12-图的着色问题)