一.问题分析
地图着色问题是01背包问题的推广,可以抽象看作无向连通图
由0/1两种状态变成了{1,2,3....N} 这N种状态,逻辑结构也从二叉树->N叉树.
这时就不能像之前那样:左子树写一段代码,右子树写一段代码.
用for()遍历每一个状态并递归,而且因为没有"不涂色",也就是说没有0状态,所以也不存在限界条件
二.代码分析
分为4部分
1.全局变量定义
2.约束函数
3.初始化函数
4.递归函数
1.定义全局变量
const int M3 = 21;
int map[M3][M3]; //记录结点的连接状况,1表示连接,0表示未连接
int n3; //表示n个结点
int e; //表示有e条边
int color_num; //用户输入颜色数量,小于M3
int color[M3]; //color[1]=2表示结点1的颜色是2
int countg = 0; //记录最优解
2.约束函数
约束函数的功能:
如果 目前元素 t 与元素 0 ~ t-1