1.问题
图的m着色问题。给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求G的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答“NO”。
2.解析
可以使用回溯算法来解决问题。
设G有n个顶点,将顶点编号为1, 2, … n,则搜索空间为深度n的m叉完全树,将颜色编号为1,2, .,m,结点
<x1,x2…,xk >(x1,x2…,xk∈{1,…,m},1≤k≤m)表示顶点1的颜色x1,顶点2的颜色x2,…,顶点k的颜色xk。
从第一个点开始涂色,第一个涂的颜色一定是有效的,接着对下一个节点进行涂色,每次涂色从第一个颜色开始,判断该节点是否可以涂该种颜色,如果可以就通过该节点继续往下涂,如果不可以涂该颜色就停止继续往下涂,换一种颜色继续涂色,直至所有节点都涂色完成。
3.设计
运用回溯法解题通常包含以下三个步骤:
(1)针对所给问题,定义问题的解空间
(2)确定易于搜索的空间结构
(3)以深度优先的方式搜索解空间,并且在搜索过程中用剪枝函数避免无效搜索。
4.分析
复杂度为O(nm^n)