感觉和uva146没什么区别啊...
就加一个排序,然后把所有的下一个排列输出...
用stl的代码如下:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define MAXN 10010
#define ll long long
using namespace std;
char a[MAXN];
int main(void) {
int n;
scanf("%d", &n);
while(n--) {
scanf("%s", a);
int len = strlen(a);
sort(a, a+len);
printf("%s\n", a);
while(next_permutation(a, a+len)) {
printf("%s\n", a);
}
cout << endl;
}
}
下面再水一次不用stl的
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define MAXN 10010
#define ll long long
using namespace std;
char a[MAXN];
bool nextPermutation(char a[], int len) {
int flag = -1;
for(int i=len-1; i>0; --i) {
if(a[i] > a[i-1]) {
flag = i-1;
break;
}
}
for(int i=len-1; i>=0; --i) {
if(a[i] > a[flag]) {
a[i] ^= a[flag];
a[flag] ^= a[i];
a[i] ^= a[flag];
break;
}
}
sort(a+flag+1, a+len);
if(flag != -1)
return true;
return false;
}
int main(void) {
int n;
scanf("%d", &n);
while(n--) {
scanf("%s", a);
int len = strlen(a);
sort(a, a+len);
printf("%s\n", a);
while(nextPermutation(a, len)) {
printf("%s\n", a);
}
cout << endl;
}
}