给定一个全由小写字母构成的字符串,求它的全排列,按照字典序从小到大输出。
输入格式:
一行,一个字符串,长度不大于8。
输出格式:
输出所有全排列,每行一种排列形式,字典序从小到大。
样例">输入样例:
在这里给出一组输入。例如:
abc
输出样例:
在这里给出相应的输出。例如:
abc
acb
bac
bca
cab
cba
代码(或者使用C++ STL next_permmutation() 函数):
#include<iostream>
#include<vector>
#include <algorithm>
using namespace std;
// 交换
inline void Swap(char& a, char& b){
char temp = a;
a = b;
b = temp;
}
// 提前,将list[],第 a 位字符,提到 b位置
// 后退,将list[],第 a 位字符,退到 b位置
void Preposition(char list[], int a, int b){
char B = list[a];
if(a>b){
for(int i=a; i>b; i--)
list[i] = list[i-1];
}else{
for(int i=a; i<b; i++)
list[i] = list[i+1];
}
list[b] = B;
}
void Perm(char list[], int k, int m){
if(k==m){
for (int i=0; i<=m; i++)
cout<<list[i];
cout<<endl;
}else{
for (int i=k; i<=m; i++){
Preposition(list, i, k);
Perm(list, k+1, m);
Preposition(list, k, i);
}
}
}
int main(){
string s;
cin>>s;
vector<char> temp;
for(char a:s)
temp.push_back(a);
sort(temp.begin(), temp.end());
char list[8];
int i = 0;
for(char a : temp)
list[i++] = a;
Perm(list, 0, i-1);
}