P2819 图的m着色问题
题目链接 https://www.luogu.com.cn/problem/P2819
复习一下dfs
放AC代码
1 #include<bits/stdc++.h> 2 #define max_n 110 3 using namespace std; 4 int n,k,m; 5 int num;//输出答案 6 int f[max_n][max_n];//存两个点是否连通 7 int color[max_n];//存每个点的颜色 8 9 bool check(int sum) 10 { 11 for(int i=1;i<=sum;i++) 12 {//若两点联通且颜色一样 13 if(color[sum]==color[i]&&f[i][sum]==true) 14 return false; 15 } 16 return true; 17 } 18 19 void dfs(int s) 20 { 21 if(s>n) 22 { 23 num++; 24 return; 25 } 26 for(int i=1;i<=m;i++) 27 { 28 color[s]=i; 29 if(check(s)==true) 30 dfs(s+1); 31 else 32 color[s]=0;//还原标记 33 } 34 } 35 36 int main() 37 { 38 cin>>n>>k>>m; 39 for(int i=1;i<=k;i++) 40 { 41 int x,y; 42 cin>>x>>y; 43 f[x][y]=true; 44 f[y][x]=true; 45 } 46 memset(color,0,sizeof(color)); 47 dfs(1); 48 cout<<num<<endl; 49 return 0; 50 }