首页 > 代码库 > 全排列,组合问题

全排列,组合问题

(1)全排列问题

 1 //全排列的两种方法 2 #include <iostream> 3 using namespace std; 4  5 //方法一,采用swap方法 6 void quanpailie(char * A,int first,int n) 7 { 8     if(A==NULL) 9     {10         cout<<"A is NULL"<<endl;11         return;12     }13     if(n<=1)14     {15         cout<<A<<endl;16         return;17     }18     for(int i=first;i<first+n;i++)19     {20         swap(A[i],A[first]);21         quanpailie(A,first+1,n-1);22         swap(A[i],A[first]);23     }24     return;25 }26 27 //采用字典序全排序,就是采用的字典排序思想,从后向前找出第一个A[i]<A[i+1],如果没有就说明结束,28 //然后在从右向左找出第一个大于A[i]的,进行交换,然后逆序i+1到最后(也就是逆序j到最后)。29 void quanpailie2(char * A,int n)30 {31     cout<<A<<endl;              //输出最开始的“abc”32     if(A==NULL||n<=0)33         return;34     while(true)35     {36         int i;37         for(i=n-2;i>=0;i--)38         {39             if(A[i]<A[i+1])40                 break;41         }42         if(i<0)43         {44             break;45         }46         for(int k=n-1;k>=0;k--)47         {48             if(A[k]>A[i])49             {50                 swap(A[i],A[k]);51                 break;52             }53         }54         reverse(A+i+1,A+n);55         cout<<A<<endl;56     }57 }58 59 int main()60 {61     char A[]="1234";62     //quanpailie(A,0,4);63     quanpailie2(A,4);64     system("pause");65 }

(2)组合问题

。。。。。