1 条题解

  • 0
    @ 2026-3-12 9:56:33

    文字教学

    这道题是求组合数的按字典序生成,用DFS(深度优先搜索)实现,核心是保证“每次选的数比上一个大”:

    1. 递归参数u 表示当前已选的数的个数,lst 表示上一个选的数(确保下一个数从 lst+1 开始,避免重复且保证升序)。
    2. 边界条件:当 u == m 时,输出当前选中的 m 个数,然后返回。
    3. 递归过程:从 lst+1n 遍历每个数 i,将 i 加入当前组合,递归到下一层(u+1lst 设为 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
    上传者