Pagini recente » Cod sursa (job #3285361) | Cod sursa (job #3248753) | Cod sursa (job #3241190) | Cod sursa (job #409215) | Cod sursa (job #3241115)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
// N și K sunt dimensiunile problemei
int N, K;
// Vector care va stoca combinația curentă
vector<int> current_combination;
// Funcția de backtracking
void backtrack(int start) {
// Dacă am obținut o combinație de dimensiune K, o afișăm
if (current_combination.size() == K) {
for (int num : current_combination) {
cout << num << " ";
}
cout << endl;
return;
}
// Încercăm să adăugăm fiecare număr la combinația curentă
for (int i = start; i <= N; ++i) {
// Adăugăm numărul curent la combinație
current_combination.push_back(i);
// Continuăm recursiv pentru a adăuga următorul număr
backtrack(i + 1);
// După ce am terminat cu această combinație, eliminăm ultimul număr (backtrack)
current_combination.pop_back();
}
}
int main() {
// Citim datele de intrare
ifstream infile("combinari.in");
infile >> N >> K;
infile.close();
// Deschidem fisierul de iesire pentru a salva rezultatele
ofstream outfile("combinari.out");
// Redirecționăm ieșirea standard (cout) către fișierul de ieșire
streambuf *coutbuf = cout.rdbuf();
cout.rdbuf(outfile.rdbuf());
// Inițiem backtracking-ul de la 1
backtrack(1);
// Restaurăm ieșirea standard (cout)
cout.rdbuf(coutbuf);
return 0;
}