问题:
给定无向连通图G和m种不同的颜色。用这些颜色为图G的所有顶点着色,每个顶点着一种颜色。每条边的2个顶点颜色不同。称为图的m着色。
如:
该无向连通图每个顶点有3种着色方式,试求图的m着色方案有几种
有6种
代码:
#include<stdio.h>
int x[10][10];//存放连接信息
int count=0;//存放方案总数
int color[10]={0};//存放着色方案
int n;//点数
int m;//色数
bool check(int c){
for(int j=1;j<c;j++){//两点不能相通且周围点颜色一致
if(x[c][j]==1&&color[c]==color[j]) return false;
}
return true;
}
void back(int c){
if(c>n){
count++;
printf("%d: ",count);
for(int i=1;i<=n;i++){
printf("%d ",color[i]);
}
printf("\n");
}
else{
for(int i=1;i<=m;i++){
color[c]=i;
if(check(c)){
back(c+1);
}
color[c]=0;
}
}
}
int main(){
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&x[i][j]);
}
}
back(1);
printf("方案个数为:%d\n",count);
return 0;
}