1.问题描述:
对图G共分成n个顶点,有m种颜色,现在要对其进行作色,要求相邻的顶点不能染相同的颜色.
2.算法设计:
- 对于给定无向连通图G 可用邻接矩阵表示,该邻接矩阵用一个二维数组表示,其中为了直观,第0行和第0列全赋值为0,不参与算法.
- 关于不同地图区域的着色,可以用一维数组x[i]表示,如: x[3]=2; 表示第3块区域着第2号色.
用一颗高度为n+1的m叉树,即表示每个结点有m种着色选择.
- 用回溯法Backtrack(i) 按深度遍历搜索,当找到第n+1层,即i>n,表示找到一个解决方案,注意只有符合条件查找才会继续.
- 代码示例:
#include<iostream>
using namespace std;
class Color{
friend int mColoring(int,int, int **); //友元函数声明
private:
bool OK(int k);
void Backtrack(int t);
int n, //顶点数
m, //颜色数
* * a, //图