Cod sursa(job #1240160)

Utilizator gabrieligabrieli gabrieli Data 10 octombrie 2014 16:52:32
Problema Generare de permutari Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#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;
}