题目描述
输入一个可能含有重复字符的字符串,打印出该字符串中所有字符的全排列。
样例:
输入abc,
输出
abc acb bac bca cab cba
简单算法,借用<algorithm>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
inline void Swap(string& a, string& b) {
string temp = b;
b = a;
a = temp;
}
void Perm(string list[], int m) {
do {
for (int i = 0; i <= m; i++) {
cout << list[i];
}
cout << " ";
} while (next_permutation(list, list + m));
}
int main() {
char a;
string list[10];
int c = 0;
while (cin >> a) {
if (a == ',') break;
else {
list[c] = a;
c++;
}
}
sort(list, list + c);
Perm(list, c );
}
另一种:只要求全排列的话无需调用函数
#include<iostream>
#include<cstring>
using namespace std;
inline void Swap(string& a, string& b) {
string temp = a;
a = b;
b = temp;
}
void Perm(string list[], int k, int m) {
if (k == m) {
for (int i = 0; i <= m; i++) cout << list[i];
cout << " ";
}
else {
for (int i = k; i <= m; i++) {
Swap(list[k], list[i]);
Perm(list, k + 1, m);
Swap(list[k], list[i]);
}
}
}
int main() {
char a;
string list[10];
int c = 0;
while (cin>>a) {
if (a == ',') break;
else {
list[c] = a;
c++;
}
}
Perm(list, 0, c);
}