51nod 1384 全排列

潘多拉之门

首先一发DFS,注意字母重复。

#include<iostream>
#include<algorithm>  
#include<cstdio>  
#include<cstring>
#include<queue>
using namespace std;
int l;
int vis[15],a[15],b[15];
char s[15];
void dfs(int d)
{
    int i;
    if(d==l)
    {
        for(i=0;i<l;i++)
        {
            cout<<b[i];
        }
        cout<<endl;
        return;
    }
    else
    {
        for(i=0;i<l;i++)
        {
            if(!vis[i])
            {
                vis[i]=1;
                b[d]=a[i];
                dfs(d+1);
                vis[i]=0;
                while(i-1<l&&a[i]==a[i+1]) i++;
            }
        }
    }
}
main()
{
    scanf("%s",s);
    l=strlen(s);
    for(int i=0;i<l;i++)
    a[i]=s[i]-'0';
    sort(a,a+l);
    memset(vis,0,sizeof(vis));
    dfs(0);
}

一发STL   next_permutation

#include<iostream>
#include<algorithm>  
#include<cstdio>  
#include<cstring>
#include<queue>
using namespace std;
main()
{
    char s[15];
    int len;
    scanf("%s",s);
    len=strlen(s);
    sort(s,s+len);
    do{
        puts(s);
    }while(next_permutation(s,s+len));
} 
原文地址:https://www.cnblogs.com/CrazyBaby/p/5781840.html