题目描述:
输入一个数组p,按照字典序从小到大输出p中元素所有的排列
样例输入:
3
2 1 2
样例输出
1 2 2
2 1 2
2 2 1
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
void print_permutation(int n,int p[],int a[],int cur)//cur指a数组中的元素个数
{
if(cur==n)//当数组a中的元素个数等于数组p中的元素个数时,输出数组a
{
for(int i=0;i<n;i++)cout<<a[i]<<' ';
cout<<'\n';
}
else for(int i=0;i<n;i++)
if(!i||p[i]!=p[i-1])
{
int c1=0,c2=0;
for(int j=0;j<cur;j++)if(a[j]==p[i])c1++;//c1指a数组中片p[i]元素的个数
for(int j=0;j<n;j++)if(p[j]==p[i])c2++;//c2指p数组中p[i]元素的个数
if(c1<c2)
{
a[cur]=p[i];
print_permutation(n,p,a,cur+1);
}
}
}
int main()
{
int n;cin>>n;//n指数组的元素个数
int p[n];int a[n];
memset(a,0,sizeof(a));
for(int i=0;i<n;i++)cin>>p[i];//输入要排列的数组元素;
sort(p,p+n);//将数组按照升序排列
print_permutation(n,p,a,0);
}