51Nod

这个是正常解法

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<time.h>
#include<map>
#include<algorithm>
#include<stdlib.h>
#include<queue>
#include<stack>
using namespace std;
int book[15],a[15],b[15],l;
void dfs(int ka,int ci)
{
    int i,j;
    if(ci==l)
    {
        for(i=1; i<=l; i++) printf("%d",b[i]);
        printf("
");
        return;
    }
    for(i=ka; i<l; i++)
    {
        if(!book[i])
        {
            book[i]=1;
            b[ci+1]=a[i];
            dfs(ka,ci+1);
            book[i]=0;
            while(i+1<l&&a[i]==a[i+1]) i++;
        }
    }
    return ;
}
int main()
{
    memset(book,0,sizeof(book));
    int i;
    char s[15];
    scanf("%s",s);
    l=strlen(s);
    for(i=0; i<l; i++) a[i]=s[i]-'0';
    sort(a,a+l);
    dfs(0,0);
    return 0;
}
原文地址:https://www.cnblogs.com/nr1999/p/9052628.html