poj 1731 Order

来源:互联网 发布:美国网络言论自由吗 编辑:程序博客网 时间:2024/06/04 01:30
Description 
对于给出的一个字符串,输出其所有不重复全排列 
Input 
一个字符串 
Output 
该字符串的全部不重复全排列 
Sample Input 
bbjd 
Sample Output 
bbdj 
bbjd 
bdbj 
bdjb 
bjbd 
bjdb 
dbbj 
dbjb 
djbb 
jbbd 
jbdb 

jdbb 


1.直接用next_permutation(),它不会产生重复串

直接上代码

#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;int main(){char s[300];int cnt;while(scanf("%s",s) != EOF){sort(s,s+strlen(s));cnt = strlen(s);do{puts(s);}while(next_permutation(c,c+cnt));}return 0;}
2.递归  先排序 再去重 (利用一个字符)

附代码

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int len,flag[300];char str[300],res[300];void dg(int x){char c = 0;if(x == len){printf("%s\n",res);return;}for(int i = 0;i<len;i++){if(!flag[i] && c != str[i]){res[x] = str[i];c = res[x];flag[i] = 1;dg(x + 1);flag[i] = 0;}}}int main(){while(scanf("%s",str) != EOF){memset(flag,0,sizeof(flag));len = strlen(str);sort(str,str+len);dg(0);}}



原创粉丝点击