全排列的简单递归实现

//newStart CY
//打印全排列
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;
const int maxn = 15;
int arr[maxn];
//实现简单的全排列
void print_permutation(int n,int cur,int* arr)//n为有n个数全排列,n为当前位置,arr为数组
{
    if(cur==n)
    {
        for(int i=0;i!=n;++i)
            cout<<arr[i];
        cout<<endl;//递归终止条件
    }else{
        for(int i=1;i<=n;++i)
        {
            int  flag = true;//排除已经使用过的
            for(int j=0;j!=cur;++j)
            {
                if(arr[j]==i)
                    flag = false;
            }
            if(flag)
            {
                arr[cur] = i;
                prev_permutation(n,cur+1,arr);
            }
        }
    }
}
int main()
{
    prev_permutation(3,0,arr);
}

 C++容器内的next_permutation

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
    int n,p[10];
    cin>>n;
    for(int i=0;i!=n;++i)
        cin>>p[i];
    sort(p,p+n);
    do{
        for(int i=0;i!=n;++i)
            cout<<p[i];
        cout<<endl;
    }while(next_permutation(p,p+n));
}

//适用于可重集

posted on 2019-09-02 18:56  chengyulala  阅读(183)  评论(0编辑  收藏  举报

导航