思想
回溯
代码
#include "stdafx.h"
#include<iostream>
#include<Math.h>
using namespace std;
//int count=0;//解法个数
#define n 5 //图有多少个点
#define m 4 //色数m
int count=0; //方案数量
int color[n]={0}; //第i个点里面放的是哪一种颜色
int a[n][n]={0,1,1,1,0, //a数组代表无向图的邻接矩阵
1,0,1,1,1,
1,1,0,1,0,
1,1,1,0,1,
0,1,0,1,0};
bool OK(int t){
for(int i=0;i<t;i++){
if(a[i][t]==1&&color[i]==color[t])
return false;
}
return true;
}
void bt(int t){
if(t==n){
for(int i=0;i<n;i++){
cout<<color[i]<<' ';
}
cout<<endl;
count++;
}else{
for(int i=0;i<m;i++){
color[t]=i+1;
if(OK(t)){
bt(t+1);
}
}
}
}
int main(){
bt(0);
cout<<count;
return 0;
}