首页 > 其他 > 详细

全排列的简单递归实现

时间:2019-09-02 19:41:03      阅读:92      评论:0      收藏:0      [点我收藏+]
//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));
}

//适用于可重集

全排列的简单递归实现

原文:https://www.cnblogs.com/newstartCY/p/11448281.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!