生成可重集的排列,按照原字符串的顺序生成。来自紫书上面的代码,非常好用
输入数据记得要按照字典序排序哦
void permutation(int n,char *P,char *A,int cur)
{
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];
permutation(n,P,A,cur+1);
}
}
}
}
}