1 条题解
-
0
文字教学
这道题是求组合数的按字典序生成,用DFS(深度优先搜索)实现,核心是保证“每次选的数比上一个大”:
- 递归参数:
u表示当前已选的数的个数,lst表示上一个选的数(确保下一个数从lst+1开始,避免重复且保证升序)。 - 边界条件:当
u == m时,输出当前选中的m个数,然后返回。 - 递归过程:从
lst+1到n遍历每个数i,将i加入当前组合,递归到下一层(u+1,lst设为i),利用回溯自动尝试下一个数。
代码
#include <bits/stdc++.h> using namespace std; int n, m, a[30]; void dfs(int u, int lst) { if (u == m) { for (int i = 0; i < m; ++i) cout << a[i] << " "; cout << endl; return; } for (int i = lst + 1; i <= n; ++i) { a[u] = i; dfs(u + 1, i); } } int main() { cin >> n >> m; dfs(0, 0); return 0; } - 递归参数:
- 1
信息
- ID
- 9927
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 3
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者
京公网安备 11011102002149号