#include <bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
constexpr int N = 1e6 + 10, inf = 0x3f3f3f3f;
bool a[N]; // 表示选择与不选
int n;
int cnt = 0;
bool way[100000][20];
void dfs(int u)
{
if (u == n + 1)
{
for (int i = 1; i <= n; i++)
{
if (a[i])
{
way[cnt][i] = true;
}
}
cnt++;
return;
}
a[u] = true; // 第一个分支:选择
dfs(u + 1);
a[u] = false; // 第二个分支:不选
dfs(u + 1);
}
void solve()
{
cin >> n;
dfs(1); // 传入枚举到第几位
for (int i = 0; i < cnt; i++)
{
for (int j = 1; j <= n; j++)
{
if (way[i][j] == true)
{
cout << j << ' ';
}
}
cout << endl;
}
}
signed main()
{
ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int T = 1;
while (T--)
{
solve();
}
return 0;
}
递归实现指数型枚举—储存方案
最新推荐文章于 2024-09-25 13:54:13 发布