生成可重集的排列模板

来源:互联网 发布:淘宝店违规怎么处理 编辑:程序博客网 时间:2024/09/21 09:17

生成可重集的排列,按照原字符串的顺序生成。来自紫书上面的代码,非常好用

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);                }            }        }    }}
0 0