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;
}