#include <iostream>
#include <algorithm>
using namespace std;
void initial(int *x,int n)//排列组合数组元素的初始化(无重复的情况)
{
for( int i=1;i<=n;i++ )
x[i]=i;
}
void execute(int *x,int n)//自定义执行函数
{
for(int i=1;i<=n;i++)
cout << x[i] << " ";
cout << endl;
}
int perm_next( int *p,int n )//下一个排列(字典序法)
{
int i,j;
for(i=n;(p[i-1]>=p[i])&&(i>=1);i--);
if(i==1) return 0;
for(j=n;(p[i-1]>=p[j])&&(j>=0);j--);
swap(p[i-1],p[j]);
for(j=0;j<(n-i+2)/2;j++)
swap(p[i+j],p[n-j]);
return 1;
}
void perm( int n )//n个元素的全排列(字典序法)
{
int *p = new int[n+1];
initial(p,n);
do
{
execute(p,n);
}
while(perm_next(p,n));
delete p;
}
int main()
{
int N=4;
perm(N);
return 0;
}