显然我们可以选用4种颜色给每个顶点涂色,或者选
用3种颜色分别给3个极大独立集涂色,例如为{b,d,f}中
的b、d、f涂颜色1,为{a,f}中的a涂颜色2,为{}中的e涂颜色4。
求极小覆盖法-布尔代数法
Step3:从中挑选所用极大独立集个数最小者, 即为X(G)
但上述子集的颜色数都不是X(G),正确的应 该是X(G)=3,该子集为:给{b,d,f}中的 b,d,f涂颜色1,为{a,e,g}中a,e,g涂颜色2为 {a,c,g}中的c涂颜色3。
由此可见,求色数其需要求极大独立集以及 一切若干极大独立集的和含所有顶点的子集, 对于大图,因为图计算量过大而成为实际上难 以凑效的算法,所以不是一个好算法,一般我 们采用贪心法等近似算法来求解 。
图的着色问题
问题来源
图的着色
• 通常所说的着色问题是指下述两类问题:
• 1.给定无环图G=(V,E),用m种颜色为图
中的每条边着色,要求每条边着一种颜色, 并使相邻两条边有着不同的颜色,这个问题 称为图的边着色问题。
• 2.给定无向图G=(V,E),用m种颜色为图
中的每个顶点着色,要求每个顶点着一种颜 色,并使相邻两顶点之间有着不同的颜色, 这个问题称为图的顶着色问题。
穷举法-Welch Powell着色法
• I.将图G中的结点按度数的递减顺序进行排列(这
种排列可能不是唯一的,因为有些结点的度数相 同)。
• II.用第一种颜色对第一结点着色,并按排列顺 序对与前面着色结点不邻接的每一结点着上同样 的颜色。
• III.用第二种颜色对尚未着色的结点重复II,用 第三种颜色继续这种做法,直到所有的结点全部 着上色为止。
回溯法
void GraphColor(int n, int c[ ][ ], int m)