想看更多的解题报告: http://iyenn.com/rec/1824570.html
转载请注明出处:http://blog.csdn.net/wangjian8006
题目大意:给出一个字符串,字符串不超过200位,问这个字符串的所有全排列,不过这个字符串里面是有重复的
解题思路:因为字符串是无序的,所以首先要把输入的字符串按小到大去排序,和经典全排列不同的是他有重复的字母,那么我们在递归的时候需要处理一下,就是本次递归的字母不用上次选的字母,根据一个这样的处理就可以避免重复的排列出现
- #include
- #include
- using namespace std;
- #define MAXV 210
-
- int t,a[MAXV];
- char s[MAXV],pr[MAXV];
-
- void pl(int cap){
- char c=0;
- int j;
- if(cap==t){
- printf("%s\n",pr);
- return ;
- }
- for(j=0;j
- if(!a[j] && c!=s[j]){
- pr[cap]=c=s[j];
- a[j]=1;
- pl(cap+1);
- a[j]=0;
- }
- }
- }
-
- int main(){
- while(gets(s)){
- memset(a,0,sizeof(a));
- t=strlen(s);
- pr[t]='\0';
- sort(s,s+strlen(s));
- pl(0);
- }
- return 0;
- }
注:本文转载自blog.csdn.net的wangjian8006的文章"http://blog.csdn.net/wangjian8006/article/details/7834271"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
评论记录:
回复评论: