1、生成1~n的排列
include#include const int N=1e3+10; int a[N]; void print_permutation(int n,int *a,int cur) { int i,j; if(cur==n) /*递归边界*/ { for(i=0;i #include const int N=1e3+10; int a[N]; void print_permutation(int n,int *a,int cur) { int i,j; if(cur==n) /*递归边界*/ { for(i=0;i
2、生成可重集的排列上面求排列的程序只适用于任意两个元素均不相同的序列,如果要求有元素相同的序列的排列时,则需要对上面的程序进行修改。
#include#include #include using namespace std; const int N=1e3+10; int a[N],p[N]; void print_permutation(int n,int *p,int *a,int cur) { int i,j; if(cur==n) { for(i=0;i #include #include using namespace std; const int N=1e3+10; int a[N],p[N]; void print_permutation(int n,int *p,int *a,int cur) { int i,j; if(cur==n) { for(i=0;i 3、求下一个排列
枚举所有排列的另一个方法是从字典序最小的排列开始,不停调用“求下一个排列”的过程。 如何求下一个排列呢?C++的STL中提供了一个库函数next_permutation。
#include#include using namespace std; int main() { int n,i,p[10]; while(~scanf("%d",&n)) { for(i=0;i #include using namespace std; int main() { int n,i,p[10]; while(~scanf("%d",&n)) { for(i=0;i