OJ第二次作业第三题

来源:互联网 发布:最好的数据恢复 编辑:程序博客网 时间:2024/06/05 21:54
#include<iostream>#include<cstdio>#include<cstring>using namespace std;int f[100],a[1000],i,n,ans;char str[1000];void dfs(int dep){    int r;    if (dep==n+1)    {        ans++;    //记录方案总数        for (r=1;r<=n;++r)            printf("%c",a[r]+96);        printf("\n");        return;    }    for (r=1;r<=26;++r)        if (f[r]>0)//如果这个字母没有取完        {            a[dep]=r;//a依然是记录数组            f[r]--;//计数器-1            dfs(dep+1);            f[r]++;//回溯一步        }}int main(){    scanf("%d",&n);    cin>>str;    for (i=0;i<n;++i)        f[str[i]-96]++;//记录每一个字母在字符串中出现了几次    dfs(1);    printf("%d",ans);    return 0;}