有重复元素的排列问题

来源:互联网 发布:淘宝怎么改价 编辑:程序博客网 时间:2024/06/05 13:29
#include<stdio.h>#include<stdlib.h>#include<string.h>using namespace std;char a[100001],s[100001],d[100001];int b[100001],zs,asd[100001],n,ans;void out(){    int i;    ans++;    for(i=1;i<=n;i++)        printf("%c",s[i]);    printf("\n");}void search(int i){    for(int j=1;j<=zs;j++){        if(b[j]){            b[j]--;            s[i]=d[j];            if(i<n)search(i+1);            else out();            b[j]++;        }    }}int main(){    freopen("perm.in","r",stdin);    freopen("perm.out","w",stdout);    int i,j,k;    scanf("%d\n",&n);    gets(a);    for(i=0;i<strlen(a);i++){        if(!asd[a[i]]){            zs++;asd[a[i]]++;d[zs]=a[i];        }        else asd[a[i]]++;    }    for(i=0;i<strlen(a);i++)        for(j=1;j<=zs;j++)            if(d[j]==a[i])b[j]=asd[a[i]];    search(1);    printf("%d\n",ans);    return 0;}
0 0