Cho mảng, in tất cả tập con kích thước r.
Input: array = {3, 5, 6} r = 2 Output: 3 5 3 6 5 6
Giải pháp: Đệ quy tổ hợp, chọn hoặc không chọn phần tử hiện tại.
Chương trình minh họa
#include <iostream>
using namespace std;
void printSubset(int arr[], int n, int r, int index, int data[], int i);
int main(){
int arr[] = {3, 5, 6};
int r = 2;
cout << "Các tập con là : ";
int n = sizeof(arr) / sizeof(arr[0]);
int data[r];
printSubset(arr, n, r, 0, data, 0);
return 0;
}
void printSubset(int arr[], int n, int r, int index, int data[], int i){
if (index == r) {
for (int j = 0; j < r; j++)
cout << data[j] << " ";
cout << endl;
return;
}
if (i >= n) return;
data[index] = arr[i];
printSubset(arr, n, r, index + 1, data, i + 1);
printSubset(arr, n, r, index, data, i + 1);
}
Kết quả
3 5 3 6 5 6