//求全排列一般有两种方法:1.递归枚举;2.用stl中的next_permutation()
//递归枚举方法
#include <iostream>
using namespace std;
void permutation(int,int);
const int maxn=100;
int a[maxn],p[maxn],book[maxn]={0};
int main()
{
int n;
cin>>n;
int i;
for (i=1;i<=n;i++)
cin>>p[i];
permutation(1,n);
return 0;
}
void permutation(int step,int n)
{
int i;
if (step==n+1)
{
for (i=1;i<=n;i++)
cout<<a[i];
cout<<endl;
}
else
for (i=1;i<=n;i++)
{
if (book[i]==0)
{
a[step]=p[i];
book[i]=1;
permutation(step+1,n);
book[i]=0;
}
}
}
//stl的next_permutation方法
#include <iostream>
#include <algorithm>//包含了next_permutation()
using namespace std;
int main()
{
int n,p[100];
cin>>n;
int i;
for (i=0;i<n;i++)
cin>>p[i];
sort(p,p+n);//把数组p中的元素从小到大排序***next_permutation(x,x+n)是用来求一个<升序>的数列的全排列的,因此要先排序
do
{
for (i=0;i<n;i++) cout<<p[i];//输出排列p
cout<<endl;
}while (next_permutation(p,p+n)); //求下一个排列
return 0;
}