说说:
这题的意思就是给你一个01串的总长度和其中1的个数,要你求出该串的所有排列,并按照字典升序输出。其实这道题和前一道Generating Fast是非常类似的,甚至更为简单。要做的就是一个DFS给每个位分配位置,若0没有用完,则先分配0。1没有用完,则接着分配1。最后将结果输出即可。
源代码:
#include <stdio.h>
#define MAX 16+5
int N,H,onum,znum;
char p[MAX];
void dfs(int,int,int);
int main(){
int T;
// freopen("data","r",stdin);
scanf("%d",&T);
while(T--){
scanf("%d%d",&N,&H);
znum=N-H;//0的个数
onum=H;//1的个数
p[N]='\0';
dfs(0,0,0);
if(T) putchar('\n');
}
return 0;
}
void dfs(int num1,int num0,int cur){
int c1,c2,i;
if(cur==N){
printf("%s\n",p);
return;
}
c1=c2=0;
if(num0<znum){//0未用完,则先放0
p[cur]='0';
dfs(num1,num0+1,cur+1);
}
if(num1<onum){//1未用完,则再放1
p[cur]='1';
dfs(num1+1,num0,cur+1);
}
return;
}The Hamming Distance Problem UVA 729 (01串的全排列)
原文地址:http://blog.csdn.net/u011915301/article/details/39612879