图的M 着色问题

图的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个顶点的着色方案,可以选择的颜色为1m

t=1->n

对当前第t个顶点开始着色:

  if:   t>n  则已求得一个解,输出着色方案即可

else:   依次对顶点t着色1-m

          if:   t与所有其它相邻顶点无颜色冲突,则继续为下一顶点着色;

      else:     回溯,测试下一颜色。

 

 

                                             

原文地址:https://www.cnblogs.com/rax-/p/8719926.html