34 lines
999 B
C++
34 lines
999 B
C++
#include <bits/stdc++.h>
|
||
using namespace std;
|
||
const int N = 110; // 定义最大数组大小
|
||
vector<int> vec; // 用于存储当前生成的子集
|
||
int n; // 输入的数字n,表示从1到n生成子集
|
||
|
||
// 深度优先搜索函数,用于生成所有可能的子集
|
||
// u: 当前处理的数字
|
||
void dfs(int u) {
|
||
// 打印当前生成的子集
|
||
for (int i = 0; i < vec.size(); i++)
|
||
cout << vec[i] << " ";
|
||
cout << endl;
|
||
|
||
// 如果已经处理完所有数字,返回
|
||
if (u == n + 1)
|
||
return;
|
||
|
||
// 尝试将每个数字添加到当前子集中
|
||
for (int i = 1; i <= n; i++) {
|
||
// 确保子集中的数字按升序排列,避免重复
|
||
if (vec.size() && i <= vec.back())
|
||
continue;
|
||
vec.push_back(i); // 将数字i添加到子集中
|
||
dfs(u + 1); // 递归处理下一个数字
|
||
vec.pop_back(); // 回溯,移除最后添加的数字
|
||
}
|
||
}
|
||
|
||
int main() {
|
||
cin >> n; // 输入数字n
|
||
dfs(1); // 从数字1开始生成子集
|
||
return 0;
|
||
} |