Toán tin vuotlen.com

Thuật toán sinh tổ hợp

code C++:

#include <iostream>
#include <vector>

using namespace std;

// Hàm in ra một tổ hợp
void printCombination(const vector<char>& combination) {
    for (char c : combination) {
        cout << c << " "; // In từng phần tử của tổ hợp cách nhau bằng khoảng trắng
    }
    cout << endl; // Xuống dòng sau khi in hết các phần tử của tổ hợp
}

// Hàm sinh các tổ hợp
void combine(const vector<char>& elements, vector<char>& combination, int start, int k) {
    if (k == 0) {
        // Khi tổ hợp đã đủ k phần tử, in tổ hợp này ra
        printCombination(combination);
        return;
    }

    // Duyệt qua các phần tử từ vị trí start đến (elements.size() - k)
    for (int i = start; i <= elements.size() - k; ++i) {
        // Thêm phần tử hiện tại vào tổ hợp
        combination.push_back(elements[i]);
        // Gọi đệ quy để sinh tổ hợp với phần tử tiếp theo
        combine(elements, combination, i + 1, k - 1);
        // Loại bỏ phần tử hiện tại khỏi tổ hợp để quay lui
        combination.pop_back();
    }
}

int main() {
    // Khởi tạo vector với các phần tử ban đầu
    vector<char> elements = {'1', '2', '3', '4', 'a', 'b'};
    vector<char> combination; // Vector để lưu tổ hợp hiện tại
    int k = 4; // Kích thước của tổ hợp

    // Gọi hàm combine để sinh và in ra tất cả các tổ hợp của elements
    combine(elements, combination, 0, k);

    return 0;
}