CBA
推荐指数:※※
来源:http://ac.jobdu.com/problem.php?pid=1369
这道题会出现重复的字符,在全排列是要注意。
使用visited []计数每个字母在字符串中出现的次数。
使用递归,全排列。
#include<iostream> #include<stdio.h> #include<stdlib.h> #include<string.h> using namespace std; const int N=10; const int ASC=128; void print_arr(char *arr,int len){ if(arr!=NULL){ int i; for(i=0;i<len;i++) printf("%c",arr[i]); printf("\n"); } } int visited[ASC]; void rank_arr(char *arr,int index,const int len){ int i; if(index==len) print_arr(arr,len); else{ for(i=0;i<ASC;i++){ if(visited[i]>0){ visited[i]--; arr[index]=(char)i; rank_arr(arr,index+1,len); visited[i]++; } } } } int main(){ char s[N],arr[N]; int i; while(~scanf("%s",s)){ memset(visited,0,sizeof(visited)); int len=strlen(s); for(i=0;i<len;i++){ visited[s[i]]++; } rank_arr(arr,0,len); } return 0; }