目录
算法填充题
子集生成问题
- 问题描述
子集生成是暴力求解算法中比较经典的问题,给出集合A,求得相应的子集,进行打印。
- 解法一:增量构造法
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define INF 300
int A[100];
void print_subset(int n,int *A,int cur)
{
for(int i=0;i<cur;i++)
printf("%d ",A[i]);//输出子集 当前的集合
printf("\n");
int s=cur?A[cur-1]+1:0;//确定当前最小的可能值 如果这里不是 这里特殊的就是cur==0时 其他的就是选比前一个大1的
for(int i=s;i<n;i++)
{
A[cur]=i;//将i加入当前的集合
print_subset(n,A,cur+1);// 递归构造子集
}
}
int main()
{
int n;scanf("%d",&n);
print_subset(n,A,0);
}
- 解法二:位向量法
#include<stdio.