递归生成排列和组合
1 void doPermute(char str[],char result[],bool used[],int length,int level){ 2 if(level==length){ 3 cout<<result<<endl; 4 return; 5 } 6 7 for(int i=0;i<length;i++){ 8 if(!used[i]){ 9 result[level]=str[i]; 10 used[i]=true; 11 doPermute(str,result,used,length,level+1); 12 used[i]=false; 13 } 14 } 15 } 16 17 void permute(char* str){ 18 int len=strlen(str); 19 char* result=new char[len+1]; 20 result[len]='\0'; 21 bool* used=new bool[len]; 22 memset(used,false,len*sizeof(bool)); 23 24 doPermute(str,result,used,len,0); 25 26 delete []result; 27 delete []used; 28 } 29 30 void doCombine(char str[],char result[],int length,int level,int start){ 31 for(int i=start;i<length;i++){ 32 result[level]=str[i]; 33 result[level+1]='\0'; 34 cout<<result<<endl; 35 36 doCombine(str,result,length,level+1,i+1); 37 } 38 } 39 40 void combine(char*str){ 41 int len=strlen(str); 42 char* result=new char[len+1]; 43 44 doCombine(str,result,len,0,0); 45 46 delete []result; 47 }