基于递归的全排列
作者:互联网
算法思想:
对于一组数1,2,3…n;
- 取第一个数1的时候,只有一种排序方法,即1。
- 取第二个数2的时候,有两种排序方法,就是将2插入1的前面或后面,结果是12,21.
- 取第三个数3的时候,有6种排序方法。
- 对于之前已经排好的12,3一共有3个空隙可以插入,结果是312,132,123,
- 对于21也是(321,231,213),所以总共有6种结果。
其他的以此类推…
/* 全排列 */#include#includeusing namespace std;int n;void print(vector<int> b){ for(auto i:b){ cout<<i<<" "; } cout<<endl;}void inserts(int k, int num, vector<int> b){ if(b.size()==n){//输出到n阶乘的所有排列 print(b); return; } if(k==1){ b.push_back(num); inserts(k+1, num+1, b); }else{ for(int i=0; i<k; i++){ b.insert(b.begin()+i,num); inserts(k+1, num+1, b); b.erase(b.begin()+i); } }}int main(int argc, char const *argv[]){ vector<int> b; cout<<"输入一个n阶全排列:"; cin>>n; inserts(1, 1, b); return 0;}
基于此全排列,我们可以间接得到字符串如"abcd"的全排列。
标签:inserts,基于,排列,cout,递归,int,num,排序 来源: https://blog.51cto.com/u_14175378/2760033