问题描述:给定无向连通图G和m中不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。是否有一种着色法使G中每条边的2个顶点着有不同的颜色。
#include<stdio.h>
int n = 5; //其中n代表是图的顶点的数量
int x[6];// i=0的位置不使用
int a[6][6] ={ //这个矩阵存储的是图的顶点之间的关系 其中i=0||j =0的位置不使用
{0,0,0,0,0,0},
{0,0,1,1,1,0},
{0,1,0,1,1,1},
{0,1,1,0,1,0},
{0,1,1,1,0,1},
{0,0,1,0,1,0}
};
void Backtrace(int t);
bool Ok(int t);
int sum=0; //存储的是可行的方案的数量
int m = 4;//假设是有4中颜色
int main(){
Backtrace(1);
printf("%d",sum);
}
void Backtrace(int t){
if(t>n){ //因为有n个顶点的图的着色树是有n+1层的
sum++;
for (int i=1; i<=n; i++){
printf("%d ",x[i]);
}
printf("\n");
}else{
for (int i=1; i<=m; i++){
x[t] = i;
if(Ok(t))
Backtrace(t+1);
x[t] = 0;
}
}
}
bool Ok(int t){
for(int i=1; i<=n; i++){
if (a[t][i] == 1&& x[t] == x[i]){
return false;
}
}
return true;
}