要求给顶点着色,且相邻的顶点不能着相同的颜色


设n个顶点,m种颜色(1~m)

  1. 能否着色,其最小着色的“色数”
  2. 着色方案;

构造邻接矩阵

  • a[i][j] = 0 i到j无边
  • a[i][j] = 1 有边

问题转化为:<x[1],.....x[i]...x[n]> 第i个顶点vi的着色(颜色标号)

bool bColor(int k)
{
	//已经有x[i]...x[k-1]
	//问,第k个结点着x[k]色
	for(int i = 1;i<k;i++)
	{
		if(a[i][k]==1&&x[i]==x[k])
			return false;
	}
	return true;
}
void BackTrack(int k)
{
	//已产生x[1]...x[k-1]
	//现产生x[k]
	if(k>n)
	{
		OutPut x();
		return ;
	}
	for(int i = 1;i<=m;i++)
	{
		x[k] = i;
		if(bColor(k))
		{
			BackTrack(k+1);
		}
	}
}