排列和组合

递归生成排列和组合

 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 }
原文地址:https://www.cnblogs.com/freewater/p/2592843.html