增量构造法输出所有子集
2017-07-06 16:03
288 查看
给定一个集合,元素为{0,1,2,3,4.。。。。。n},输出所有的子集
思路是一次选出一个元素放入到集合A中,A始终保持从小到大顺序,cur记录当前子集中元素个数,下一个递归的子集为A[cur-1] + 1到n中任意选一个数添加在A的末尾,表示子集个数加1.
#include <iostream>
using namespace std;
void print_subset(int n, int* A, int cur)
{
for(int i = 0; i < cur; i++) cout<<A[i]<<" ";
if(cur)cout<<endl;
int s = cur ? A[cur-1] + 1 : 0;
for(int i = s; i < n; i++)
{
A[cur] = i;
print_subset(n, A, cur+1);
}
}
int main()
{
while(1)
{
int n;
cin>>n;
int A[20];
print_subset(n, A, 0);
}
}
思路是一次选出一个元素放入到集合A中,A始终保持从小到大顺序,cur记录当前子集中元素个数,下一个递归的子集为A[cur-1] + 1到n中任意选一个数添加在A的末尾,表示子集个数加1.
#include <iostream>
using namespace std;
void print_subset(int n, int* A, int cur)
{
for(int i = 0; i < cur; i++) cout<<A[i]<<" ";
if(cur)cout<<endl;
int s = cur ? A[cur-1] + 1 : 0;
for(int i = s; i < n; i++)
{
A[cur] = i;
print_subset(n, A, cur+1);
}
}
int main()
{
while(1)
{
int n;
cin>>n;
int A[20];
print_subset(n, A, 0);
}
}
相关文章推荐
- 给一个整数数组,输出所有可能的子集
- 输出一个集合的所有子集(算法)
- 求一个集合的所有子集 输出一个数所有平方和的情况 背包问题的递归解决
- 暴力求解法_子集生成(增量构造法,位向量法,二进制法)
- 给定一个集合,输出它的所有子集(JAVA实现)
- 子集生成算法——增量构造法
- 使用递归函数,输出n个元素的所有子集
- 算法篇:输出集合的所有子集
- 子集生成 增量构造法 位向量法 二进制法
- 回朔+ STL求出并输出所有子集
- 请编写一个递归函数,用来输出n个元素的所有子集。例如,三个元素{a,b,c}的所有子集是:{},{a},{b},{c},{a,c},{ac},{b,c},{a,b,c}.
- 位向量法输出所有子集
- 使用递归函数,输出n个元素的所有子集
- 枚举子集 增量构造法 位向量法 二进制法
- 输出一个集合所有子集的元素和(Print sums of all subsets of a given set)
- 输出集合{1,2,...,n}的所有子集
- 输入一个集合,输出这个集合的所有子集
- 子集生成算法 之 位向量法和增量构造法
- 【算法竞赛入门经典】7.3子集生成【增量构造法】【位向量法】【二进制法】
- 输出一个集合的所有子集