给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。
我们假设对于小写字母有 a<b<…<y<z,而且给定的字符串中的字母已经按照从小到大的顺序排列。
输入格式
输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在 11 到 66 之间。
输出格式
输出这个字符串的所有排列方式,每行一个排列。
要求字母序比较小的排列在前面。
字母序如下定义:
已知 S=s1s2…sk,T=t1t2…tk,则 S<T等价于,存在 p(1≤p≤k),使得 s1=t1,s2=t2,…,sp−1=tp−1,sp<tp成立。
数据范围
字符串的长度在 11 到 66 之间
输入样例:
abc
输出样例:
abc
acb
bac
bca
cab
cba
#include <bits/stdc++.h>
using namespace std;
void dfs(string s, vector<bool> visited, string res, int cur) {
if(cur == s.size()) {
cout << res << endl;
return;
}
for(int i= 0; i < s.size(); i++) {
if(!visited[i]) {
visited[i] = true;
res += s[i];
dfs(s,visited, res, cur+1);
visited[i] = false;
res.pop_back();
}
}
}
int main() {
string s = "";
cin >> s;
vector<bool> visited(s.size(), false);
dfs(s,visited, "", 0);
return 0;
}