回溯法---->图的着色问题
图的着色问题
1、问题描述
图的m-着色判定问题——给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色,是否有一种着色法使G中任意相邻的2个顶点着不同颜色?
图的m-着色优化问题——若一个图最少需要m种颜色才能使图中任意相邻的2个顶点着不同颜色,则称这个数m为该图的色数。求一个图的最小色数m的问题称为m-着色优化问题
2、找一个图的所有m-着色方案
procedure MCOLORING( k ) ∥这是图着色的一个递归回溯算法。图G 用它的布尔邻接矩阵GRAP H(1∶n , 1∶ n)表示∥ ∥它计算并打印出符合以下要求的全部解, 把整数1 , 2 , ⋯ ,m 分配给图中∥ ∥各个结点且使相邻近的结点的有不同的整数。k 是下一个要着色结点的下标∥ global integer m, n , X(1∶ n) boolean GRAPH (1∶n , 1∶n) integer k loop ∥产生对X( k)所有的合法赋值∥
repeat end MCOLORING |
在最初调用callMCOLORING(1)之前, 应对图的邻接矩阵置初值并对数组X置0值。在确定了X(1)到X(k-1)的颜色之后,过程NEXTVALUE从这m种颜色中挑选一种符合要求的颜色, 并把它分配给X(k) , 若无可用的颜色, 则返回X(k) = 0。
3、获取下一种颜色
procedure NEXTVALUE( k)
end NEXTVALUE |
4、例子