51Nod 1384全排列

#include "iostream"
#include "cstdio"
#include "cstring"
#include "algorithm"
#include "map"
using namespace std;
char a[11];
vector<char> ans;
bool visit[11];
int n;
map<vector<char>,bool> m;
void dfs(int k)
{
    if(k==n){
        if(m.find(ans)==m.end()){
            m[ans]=1;
            for(int i=0;i<n;i++)
                printf("%c",ans[i]);
            printf("
");
        }
        return ;
    }
    for(int i=0;i<n;i++)
    {
        if(visit[i])
            continue;
        ans[k]=a[i];
        visit[i]=1;
        dfs(k+1);
        visit[i]=0;
    }
}

int main()
{
    gets(a);
    int len=strlen(a);
    n=len;
    sort(a,a+len);
    memset(visit,0,sizeof(visit));
    m.clear();
    ans.resize(len);
    dfs(0);
    return 0;
}
原文地址:https://www.cnblogs.com/kimsimple/p/7208976.html