//全排列问题的详细解答
#include<iostream>
using namespace std;
#define MAXN 100+10
//0~n排序
void print_permutation(int n,int *A,int cur)
{
if(cur==n)//递归边界
{
for(int i=0;i<n;i++)
cout<<A[i];
cout<<endl;
}
else for(int i=1;i<=n;i++)
{
int ok=1,j;//判断与之前的数有无重复
for(j=0;j<cur;j++)
if(A[j]==i)
ok=0;
if(ok)
{
A[cur]=i;
print_permutation(n,A,cur+1);
}
}
}
//自定义排序数组
void print_permutation(int n,int *A,int cur,int *p)
{
if(cur==n)//递归边界
{
for(int i=0;i<n;i++)
cout<<A[i];
cout<<endl;
}
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++;
for(int j=0;j<n;j++) if(p[i]==p[j]) c2++;
if(c1<c2)
{
A[cur]=p[i];
print_permutation(n,A,cur+1,p);
}
}
}
//同时也可以使用algorithm里面的自带函数next_permution(p,p+n);
void Solution()
{
int p[MAXN],n;
cin>>n;
for(int i=0;i<n;i++)
cin>>p[i];
sort(p,p+n);
do
{
for(int i=0;i<n;i++)
cout<<p[i];
cout<<endl;
}while(next_permutation(p,p+n));
}
//全排列问题的详细解答
最新推荐文章于 2024-06-21 13:34:53 发布