STL里面的next_permutation求字典序排列问题

来源:互联网 发布:数据整合平台 编辑:程序博客网 时间:2024/05/16 06:39

next_permutation函数的实现原理:

在当前序列中,从尾端往前寻找两个相邻元素,前一个记为*i,后一个记为*ii,并且满足*i < *ii。然后再从尾端寻找另一个元素*j,如果满足*i < *j,即将第i个元素与第j个元素对调,并将第ii个元素之后(包括ii)的所有元素颠倒排序,即求出下一个序列了。

#include<cstdio>#include<algorithm>#include<cstdlib>#include<cstring>#include<iostream>#include<cmath>#include<string>#include<map>#define INF 99999999#define LL long long#define maxn 1005using namespace std;bool used[maxn];int perm[maxn];void permutation1(int pos,int n){if(pos==n){return ;}for(int i=0;i<n;i++){if(!used[i]){perm[pos]=i;used[i]=true;permutation1(pos+1,n);used[i]=false;}}return ;}int perm2[maxn];void permutation2(int n){for(int i=0;i<n;i++){perm2[i]=i;}do{for(int i=0;i<n;i++)cout << perm2[i] << ' ';cout << endl;}while(next_permutation(perm2,perm2+n));cout << endl;return ;}int main(){permutation2(4);return 0;}



原创粉丝点击