Cod sursa(job #369476)

Utilizator alexandru92alexandru alexandru92 Data 28 noiembrie 2009 14:47:31
Problema Generare de permutari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
/* 
 * File:   main.cpp
 * Author: virtualdemon
 *
 * Created on November 28, 2009, 2:38 PM
 */
#include <vector>
#include <fstream>
#include <cstdlib>
#include <iterator>
#include <algorithm>
#define pb push_back

/*
 * 
 */
using namespace std;
vector< unsigned int > v;
inline bool swap( unsigned int& a, unsigned int& b )
{
    a+=b;
    b=a-b;
    a-=b;
}
int main(int argc, char** argv)
{int n, i, k;
    ifstream in("permutari.in");
    in>>n;
    for( i=0; i < n; ++i )
        v.pb( i+1 );
    ofstream out("permutari.out");
    while( true )
    {
        copy( v.begin(), v.end(), ostream_iterator<unsigned int>( out, " " ) );
        out<<'\n';
        for( i=n-2; i >= 0 && v[i] > v[i+1]; --i );
        if( i < 0 )
            break;
        for( k=n-1; k>= 0 && v[i] > v[k]; --k );
        swap( v[i], v[k] );
        reverse( v.begin()+i+1, v.end() );
    }
    return (EXIT_SUCCESS);
}