这个是正常解法
#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; }