要求给顶点着色,且相邻的顶点不能着相同的颜色
设n个顶点,m种颜色(1~m)
- 能否着色,其最小着色的“色数”
- 着色方案;
构造邻接矩阵
- 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);
}
}
}