Ranking (as of 2013-01-14): 25
Language: C++
/*
UVa 10063 - Knuth's Permutation
To build using Visual Studio 2008:
cl -EHsc -O2 UVa_10063_Knuths_Permutation.cpp
*/
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
const int nr_chars_max = 10;
void knuths_permutation(int n, int i, const char* s, char* t)
{
if (i == n) {
t[n] = '\0';
printf("%s\n", t);
}
else {
char u[nr_chars_max + 1];
u[0] = s[i];
memcpy(&u[1], t, i);
knuths_permutation(n, i + 1, s, u);
for (int j = 0; j < i; j++) {
swap(u[j], u[j + 1]);
knuths_permutation(n, i + 1, s, u);
}
}
}
int main()
{
bool printed = false;
char s[nr_chars_max + 1], t[nr_chars_max + 1];
while (scanf("%s", s) != EOF) {
if (printed)
putchar('\n');
else
printed = true;
knuths_permutation(strlen(s), 0, s, t);
}
return 0;
}
No comments:
Post a Comment