1.递归实现指数型枚举
从1——n这n(n<20)个数中随机选取任意多个。输出所有可能的方案,
等价于每个整数可以选或者不选,所有的方案为2^n种,DFS思想,选与不选,选了之后要回溯
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <map>
#include <set>
#include <queue>
#include <cmath>
using namespace std;
const int MAXN=1e4+5;
int n;
vector<int> chosen; //被选择的数
void calc(int x)
{
if(x==n+1){
for(int i=0;i<chosen.size();i++)
printf("%d ",chosen[i]);
printf("\n");
return ;
}
//不选x
calc(x+1); //求解子问题
//选x
chosen.push_back(x); //记录x被记录
calc(x+1); //求解子问题
chosen.pop_back();//还原
}
int main()
{
scanf("%d",&n);
calc(1);
}
2.递归实现排列型枚举
从1——n这n个整数中随机选出m(0<=m<=n<20)个,,输出所有可能的方案