首页 > 代码库 > 全排列,组合问题
全排列,组合问题
(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)组合问题
。。。。。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。