图的M 着色问题(color)
题目描述
给定无向连通图G 和M 种不同的颜色,用这些颜色为图G 的各顶点着色,
每个顶点着一种颜色。如果有一种着色法使G 中每条边的2 个顶点着不同的颜
色,则称这个图是M 可着色的。图的M 着色问题是对于给定图G 和M 种颜色,
找出所有不同的着色法。
对于给定的无向连通图G 和M 种不同的颜色,编程计算图的所有不同的着
色法。
输入
第一行有3 个正整数N,K 和M,表示给定的图G 有N 个顶点和K 条边,M 种
颜色。顶点编号为1,2……,N。接下来的K 行中,每行有2 个正整数U,V,
表示图G 的一条边(U,V)。
数据范围:1<N<=100 1<K<=2500 1<M<=6
输出
不同的着色方案数
样例输入
5 8 4
1 2
1 3
1 4
2 3
2 4
2 5
3 4
4 5
样例输出
48
****记录下每一个左端点和右端点,排序然后把每一个左端点颜色如果和后端点颜色一样就重新上色。所有点上完色就方法加一,然后他一直输出0。。。我也很绝望哇。
***存储n个顶点的着色方案,可以选择的颜色为1到m
t=1->n
对当前第t个顶点开始着色:
if: t>n 则已求得一个解,输出着色方案即可
else: 依次对顶点t着色1-m,
if: t与所有其它相邻顶点无颜色冲突,则继续为下一顶点着色;
else: 回溯,测试下一颜色。