部落卫队
考试题(打了一个小时才骗到十分......),考试后突然发现是搜索.....,其实就是去枚举他能不能进护卫队.....,代码不长:
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 }
.....