使用不同的元素生成给定数组大小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
答案 0 :(得分:0)
让我们用next_permutation
解决这个问题。这将置换输入,在访问所有置换后返回false
。
给定排序的输入:int arr[]
,我们可以做到:
do {
copy(cbegin(arr), cend(arr), ostream_iterator<int>(cout, " "));
cout << endl;
} while(next_permutation(begin(arr), end(arr)));
此示例假定唯一的输入,在这种情况下,组合和排列是相同的。如果您没有唯一的输入,您实际上是在要求这些数字的组合。 next_combination
的目的是在这里:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2639.pdf如果发现您没有唯一的输入并且可以使用它,则可以复制该实现。您还可以在这里找到有关next_combination
的更多信息:https://stackoverflow.com/a/35215540/2642059