接下來 M 行,每行一組數 A, B 表示 A, B 相鄰
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=60;
int G[maxn][maxn],color[maxn],ans=0;
void graphColor(int n,int c);
bool check(int k);
int main()
{
//freopen("in.txt","r",stdin);
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
G[x][y]=1;
G[y][x]=1;
}
graphColor(n,4);
printf("%d\n",ans);
return 0;
}
void graphColor(int n,int c){
memset(color,0,sizeof(color));
int k=1;
while(k>=1){
color[k]++;
while(color[k]<=c)//選擇顏色
if(check(k))break;
else color[k]++;
if(color[k]<=c&&k==n){//得到一個方案
ans++;
}
else if(color[k]<=c&&k<n){
k++;
}
else {//返回父節點
color[k]=0;
k--;
}
}
}
bool check(int k){
for(int i=1;i<k;i++)
if(G[i][k]==1&&color[i]==color[k])
return false;
return true;
}