【发布时间】:2019-09-16 21:09:15
【问题描述】:
生成具有不同元素的给定数组的所有可能大小为 r 的子集。 在获得具有不同元素的给定数组的所有可能大小为 r 的子集后,我需要帮助来计算子集。生成后如何计算不同元素的子集
#include <bits/stdc++.h>
using namespace std;
void combinationUtil(int arr[], int n, int r, int index, int data[], int i);
void printCombination(int arr[], int n, int r)
{
int data[r];
combinationUtil(arr, n, r, 0, data, 0);
}
void combinationUtil(int arr[], int n, int r, int index,int data[], int i)
{
int c=0;
if (index == r) {
for (int j = 0; j < r; j++) {
printf("%d ", data[j]);
}
printf("\n");
return;
}
if (i >= n)
return;
data[index] = arr[i];
combinationUtil(arr, n, r, index + 1, data, i + 1);
combinationUtil(arr, n, r, index, data, i + 1);
}
int main()
{
int arr[] = { 0,1,2,3,4};
int r = 2;
int n = sizeof(arr) / sizeof(arr[0]);
printCombination(arr, n, r);
return 0;
}
output
0 1
0 2
0 3
0 4
1 2
1 3
1 4
2 3
2 4
3 4
number of subset 10
【问题讨论】:
-
1)
int data[r];-- 这不是有效的 C++。 2)#include <bits/stdc++.h>-- 使用正确的标题,而不是这个。 3)这个问题是通过使用std::next_permutation和其他一些项目来解决的,都没有递归。 -
数组的大小和k长度如何
标签: c++