Cod sursa(job #1752364)

Utilizator dtoniucDaniel Toniuc dtoniuc Data 3 septembrie 2016 16:57:03
Problema Combinari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>

using namespace std;

void Backtrack(int pos, int n, int k, int* solution, ostream &fout);
void PrintSolution(int k, int *solution, ostream &fout);

int main()
{
	ifstream fin;
	ofstream fout;
	fin.open("combinari.in");
	fout.open("combinari.out");

	int n, k;
	fin >> n >> k;
	
	int* solution = new int[k + 1]();
	Backtrack(1, n, k, solution, fout);

	fin.close();
	fout.close();
}

void Backtrack(int pos, int n, int k, int* solution, ostream &fout)
{
	if (pos > k)
	{
		PrintSolution(k, solution, fout);
	}
	else if (n - solution[pos - 1] < k - pos)
	{
		return;
	}
	else
	{
		for (int i = solution[pos - 1] + 1; i <= n; i++)
		{
			solution[pos] = i;
			Backtrack(pos + 1, n, k, solution, fout);
		}
	}
}

void PrintSolution(int k, int *solution, ostream &fout)
{
	for (int i = 1; i <= k; i++)
	{
		fout << solution[i] << " ";
	}

	fout << "\n";
}