Pagini recente » Cod sursa (job #1298717) | Cod sursa (job #2241105) | Cod sursa (job #1362768) | Cod sursa (job #302303) | Cod sursa (job #1240160)
#include <fstream>
#include <algorithm>
#include <iterator>
using namespace std;
inline void output(const std::vector<int>& v, ostream& out) {
copy( v.begin(), v.end(), ostream_iterator<int>(out) );
out << '\n';
}
bool next_perm(vector<int>::iterator start, vector<int>::iterator stop) {
if (start == stop) return false;
vector<int>::iterator i = stop, i1, i2;
if (start == --i) return false;
while (true) {
i1 = i;
if (*--i < *i1) {
i2 = stop;
while (*i >= *--i2)
;
iter_swap( i, i2 );
reverse( i1, stop );
return true;
}
if (i == start) {
reverse( start, stop );
return false;
}
}
}
int main() {
ifstream fin("permutari.in");
ofstream fout("permutari.out");
int n;
fin >> n;
vector<int> perm(n, 0);
generate(perm.begin(), perm.end(), [] () {static int n = 1; return n++;});
do {
output(perm, fout);
} while (next_perm( perm.begin(), perm.end() ));
return 0;
}