生成字典续序列。
//
// main.cpp
// 10098_1
//
// Created by Fangpin on 15/3/7.
// Copyright (c) 2015年 FangPin. All rights reserved.
//
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
char s[23],ans[23];
void dfs(int deep,int len){
if(deep==len)
puts(ans);
else{
for(int i=0;i<len;++i){
if(!i || s[i]!=s[i-1]){
int c1=0,c2=0;
for(int j=0;j<deep;++j) if(ans[j]==s[i]) ++c1;
for(int j=0;j<len;++j) if(s[i]==s[j]) ++c2;
if(c1<c2){
ans[deep]=s[i];
dfs(deep+1,len);
}
}
}
}
}
int main(int argc, const char * argv[]) {
// insert code here...
int n;
scanf("%d",&n);
while(n--){
scanf("%s",s);
memset(ans,0,sizeof(ans));
int len=strlen(s);
sort(s,s+len);
dfs(0,len);
printf("\n");
}
return 0;
}
也可以使用c++库函数next_permutation(iter.begin(),iter.end())
//
// main.cpp
// 10098
//
// Created by Fangpin on 15/3/7.
// Copyright (c) 2015年 FangPin. All rights reserved.
//
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
int main(int argc, const char * argv[]) {
// insert code here...
int n;
scanf("%d",&n);
char s[29];
while(n--){
scanf("%s",s);
int len=strlen(s);
sort(s,s+len);
printf("%s\n",s);
while(next_permutation(s,s+len)){
printf("%s\n",s);
}
printf("\n");
}
return 0;
}