Cod sursa(job #1968792)

Utilizator andraSaceliAndra Saceli andraSaceli Data 17 aprilie 2017 21:03:23
Problema Submultimi Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 2.97 kb
#include <fstream>
#include <vector>
 
using namespace std ;
 
ifstream cin ("submultimi.in");
ofstream cout ("submultimi.out");
 
/*void back (int target, int current, vector <int> &terms) {  partitionarea unui numar
    // cout << target << ' ' << current << '\n' ;
    if (current > target) {
        return ;
    }
    else if (current == target) {
        for (auto x : terms) {
            cout << x << ' ' ;
        }
        cout << '\n' ;
    }
    else {
        int val = 1 ; 
        if (terms.size()) {
            val = terms.back () ;
        }
        for (int i = val; i <= target - current ; ++ i) {
            terms.push_back (i) ;
            back (target, current + i, terms) ;
            terms.pop_back() ;
        }
    }
}*/
 
/*void back (int n, vector <int> &terms, vector <bool> &viz) { permutari
    if (terms.size() == n) {
        for (auto x : terms) {
            cout << x << ' ' ;
        }
        cout << '\n' ;
        return ; 
    }
    for (int i = 1 ; i <= n ; ++ i) {
        if (viz [i] == 0) {
            viz [i] = 1 ;
            terms.push_back (i) ;
            back (n, terms, viz) ;
            terms.pop_back() ;
            viz [i] = 0;
        }
    }
}*/
 
/*void back (int n, int k, vector <int> &terms, vector <bool> &viz) { combinari
    if (terms.size() == k) {
        for (auto x : terms) {
            cout << x << ' ' ;
        }
        cout << '\n' ;
        return ; 
    }
    int val = 1 ;
    if (terms.size()) {
        val = terms.back() + 1 ;
    }
    for (int i = val ; i <= n ; ++ i) {
        if (viz [i] == 0) {
            viz [i] = 1 ;
            terms.push_back (i) ;
            back (n, k, terms, viz) ;
            terms.pop_back() ;
            viz [i] = 0;
        }
    }
}*/
 
 
/*void back (int n, int k, vector <int> &terms, vector <bool> &viz) { aranjamente
    if (terms.size() == k) {
        for (auto x : terms) {
            cout << x << ' ' ;
        }
        cout << '\n' ;
        return ; 
    }
    for (int i = 1 ; i <= n ; ++ i) {
        if (viz [i] == 0) {
            viz [i] = 1 ;
            terms.push_back (i) ;
            back (n, k, terms, viz) ;
            terms.pop_back() ;
            viz [i] = 0;
        }
    }
}*/
 
void back (int n, vector <int> &terms, vector <bool> &viz) { 
    int val = 1 ;
    if (terms.size()) {
        val = terms.back () + 1;
        for (auto x : terms) {
            cout << x << ' ' ;
        }
        cout << '\n' ;
    }
    for (int i = val ; i <= n ; ++ i) {
        if (viz [i] == 0) {
            viz [i] = 1 ;
            terms.push_back (i) ;
            back (n, terms, viz) ;
            terms.pop_back() ;
            viz [i] = 0;
        }
    }
}
 
 
int main(int argc, char const *argv[])
{
    int n ; 
    cin >> n ;
    vector <int> v ;
    vector <bool> viz (n + 1, false) ;
    // back (5, 0, v) ;
    /*for (int i = 1 ; i <= n ; ++ i ) {
        back (i, v, viz) ;
        cout << "====================================\n" ;
    }*/
    back (n, v, viz) ;
    return 0;
}