部落卫队

考试题(打了一个小时才骗到十分......),考试后突然发现是搜索.....,其实就是去枚举他能不能进护卫队.....,代码不长:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a[11000],b[11000];
 4 int ji_lu[11000];
 5 int ans[1100][1100];
 6 int maxn;
 7 int n,m;
 8 void dfs(int x,int y)
 9 {
10     if(x==n+1)
11     {
12         if(y>maxn)
13         {
14             maxn=y;
15             for(int i=1;i<=n;i++) ji_lu[i]=b[i];//记录一下 
16         }
17         return ;
18     }
19     int biao_ji=0;
20     for(int i=1;i<=x-1;i++)
21     {
22         if(b[i]&&ans[x][i]==1)//去看能不能放 
23         {
24             biao_ji=1;
25             break;
26         }
27     }
28     if(!biao_ji)
29     {
30         b[x]=1;
31         dfs(x+1,y+1);//搜下一个 
32         b[x]=0;
33     }
34     dfs(x+1,y);
35 }
36 int main()
37 {
38     cin>>n>>m;
39     for(int i=1;i<=m;i++)
40     {
41         int x;
42         int y;
43         cin>>x>>y;
44         ans[x][y]=1;
45         ans[y][x]=1;//读入,两人互为仇敌 
46     }
47     dfs(1,0);
48     cout<<maxn<<endl;
49     for(int i=1;i<=n;i++) cout<<ji_lu[i]<<" ";
50 }

.....

原文地址:https://www.cnblogs.com/dai-jia-ye/p/9510919.html