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 }

 

posted @ 2022-04-25 15:27  爱吃虾滑  阅读(38)  评论(0编辑  收藏  举报