Cod sursa(job #1968746)

Utilizator andraSaceliAndra Saceli andraSaceli Data 17 aprilie 2017 20:37:26
Problema Combinari Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.66 kb
#include <fstream>
#include <vector>

using namespace std ;

ifstream cin ("combinari.in");
ofstream cout ("combinari.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) {
	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;
		}
	}
}

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 (4, 3, v, viz) ;
	return 0;
}