/*
2的20次方:大概一百万1e6
2的16次方:65536
递归搜索树,DFS深度优先
*/
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
const int N = 15;
int n;
int st[N]; // state,记录每个位置的状态,0表示还没有选,1表示选,2表示不选
void dfs(int u) // u表示当前遍历到第几个数
{
if(u > n) // 遍历完所有数
{
for(int i = 1; i <= n; i++)
if(st[i] == 1) cout << i << " "; // 选就输出,不选为空字符就不输出
cout << endl;
return;
}
// 第一个分支,选
st[u] = 1;
dfs(u + 1);
st[u] = 0; // 回溯
// 第二个分支,不选
st[u] = 2;
dfs(u + 1);
st[u] = 0; // 回溯
}
int main()
{
cin >> n;
dfs(1);
return 0;
}
92. 递归实现指数型枚举
于 2023-10-24 15:25:49 首次发布