首先一发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)); }
时间: 2024-10-12 15:04:21