//全排列 P135 王道
//方法一:递归
//https://www.nowcoder.com/practice/5632c23d0d654aecbc9315d1720421c1?tpId=61&tqId=29515&tPage=1&ru=/kaoyan/retest/1002&qru=/ta/pku-kaoyan/question-ranking
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
using namespace std;
const int MAXN = 10;
bool visit[MAXN]; //不需要赋初始值么?
char sequence[MAXN];
void GetPermutation(string str,int index){
if(index == str.size()){
for(int i=0;i<str.size();++i){
printf("%c",sequence[i]);
}
printf("\n");
}
for(int i=0;i<str.size();++i){
if(visit[i]){
continue;
}
visit[i] = true;
sequence[index] = str[i];
GetPermutation(str,index+1); // 往下面一层访问
visit[i] = false;//里面有回溯 访问完自己后要把自己置掉
}
return;
}
int main(){
string str;
while(cin>>str){
sort(str.begin(),str.end()); //对字符串进行排序
GetPermutation(str,0);
printf("\n"); //每组样例输出结束后要再输出一个回车。
}
return 0;
}
//全排列 P135 王道
//方法2:非递归
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
using namespace std;
string str;
bool GetNextPermutation(){
int n = str.size();
int index = n-1;
while(index >= 1 && str[index] < str[index-1]){
index--;
}
index--;
if(index < 0) return false;
for(int i=n-1;i>index;--i){
if(str[index] < str[i]){
swap(str[index],str[i]);
break;
}
}
reverse(str.begin()+index+1,str.end());
return true;
}
int main(){
while(cin>>str){
sort(str.begin(),str.end()); //对字符串进行排序
do {
cout<<str<<endl;
}while(GetNextPermutation());
printf("\n"); //每组样例输出结束后要再输出一个回车。
}
return 0;
}
//全排列 P135 王道 //方法3:系统函数 #include <iostream> #include <cstdio> #include <string> #include <algorithm> using namespace std; int main(){ string str; while(cin>>str){ sort(str.begin(),str.end()); //对字符串进行排序 do { cout<<str<<endl;
}while(next_permutation(str.begin(),str.end())); printf("\n"); //每组样例输出结束后要再输出一个回车。 } return 0;
}