码迷,mamicode.com
首页 > 其他好文 > 详细

The Hamming Distance Problem UVA 729 (01串的全排列)

时间:2014-09-27 18:16:30      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:acm   c   uva   源代码   算法   

说说:

这题的意思就是给你一个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串的全排列)

标签:acm   c   uva   源代码   算法   

原文地址:http://blog.csdn.net/u011915301/article/details/39612879

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!