贴个代码方便复习,思路是每个元素轮流当本次全排列第一个元素,同时将待排序列变短,直至只剩下一个元素,输出结果。
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
vector<string> result; //存储结果方便排序
void swapa(string& ss, int i, int j) {
char temp;
temp = ss[i];
ss[i] = ss[j];
ss[j] = temp;
}
void perm(string& ss, int start, int end) {
if (end == start) {
result.push_back(ss);
}
else {
for (int i = start; i <= end; ++i) {
swapa(ss, start, i);
perm(ss, start + 1, end);
swapa(ss, start, i);
}
}
}
int main() {
string ss;
while (cin >> ss) {
perm(ss, 0, ss.length() - 1);
sort(result.begin(), result.end());
for (int i = 0; i < result.size(); ++i) {
cout << result[i] << endl;
}
}
}