Cod sursa(job #3241115)

Utilizator andreitricaAndrei Trica andreitrica Data 26 august 2024 17:41:13
Problema Combinari Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.49 kb
#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;
}