Cod sursa(job #1457596)

Utilizator tony.hegyesAntonius Cezar Hegyes tony.hegyes Data 3 iulie 2015 18:06:10
Problema Combinari Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
#include <iostream>
using namespace std;

///// DESCRIPTION
// THIS PROGRAM FINDS ALL COMBINATIONS
// OF NUMBERS BETWEEN 1 AND n
// BY USING BACKTRACKING
/////

void combinations(ostream&, int, int, int[], bool[], int, int);
void output(ostream&, int[], int);

int main(int argc, char **argv)
{
	// INPUT
	int n, k;
	
	ifstream indata("combinari.in");
	indata >> n >> k;
	indata.close();
	
	// GENERATION AND OUTPUT OF PERMUTATIONS
	ofstream outdata("combinari.out");
	
	int stack[k]; bool used[n];
	for (int i = 0; i < n; i++) {
		used[i] = false;
	}
	
	//n = 2; k = 2;
	combinations(cout, n, k, stack, used, 0, 1);
		
	outdata.close();
	
	return 0;
}

void combinations(ostream& outdata, int n, int k, int stack[], bool used[], int step, int start) {
	for (int i = start; i <= n; i++) {
		if (used[i - 1] == true) {
			continue;
		}
		
		stack[step] = i;
		used[i - 1] = true;
		
		if (step < k - 1) {
			combinations(outdata, n, k, stack, used, step + 1, i + 1);
		} else {
			output(outdata, stack, k);
		}
		
		used[i - 1] = false;
	}
}

void output(ostream& outdata, int permutation[], int n) {
	for (int i = 0; i < n; i++) {
		outdata << permutation[i] << " ";
	}
	outdata << "\n";
}