题意大概就是给出01串,让你输出全排列。
可以用next_permutation水过。
用dfs的时候注意添加0或者1的时候判断是否重复和注意不要重复递归。
#include<cstdio>
#include<cstring>
const int MAXN=20;
int P[MAXN],A[MAXN];
void dfs(int cur,int n){
if(cur==n){
for(int i=0;i<n;i++)
printf("%d",A[i]);
printf("\n");
}
else for(int i=0;i<n;i++) if(!i || P[i]!=P[i-1]){
int c1=0,c2=0;
for(int j=0;j<n;j++) if(P[i]==P[j]) c1++;
for(int j=0;j<cur;j++) if(P[i]==A[j]) c2++;
if(c2<c1){
A[cur]=P[i];
dfs(cur+1,n);
}
}
}
int main(){
//freopen("in.txt","r",stdin);
int T;
scanf("%d",&T);
while(T--){
int N,H;
memset(P,0,sizeof(P));
scanf("%d%d",&N,&H);
for(int i=N-H;i<N;i++) P[i]=1;
dfs(0,N);
if(T) printf("\n");
}
return 0;
}