AcWing 93:递归实现组合型枚举 ← DFS

这篇具有很好参考价值的文章主要介绍了AcWing 93:递归实现组合型枚举 ← DFS。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【题目来源】
https://www.acwing.com/problem/content/95/

【题目描述】
从 1∼n 这 n 个整数中随机选出 m 个,输出所有可能的选择方案。

【输入格式】
两个整数 n,m,在同一行用空格隔开。

【输出格式】
按照从小到大的顺序输出所有方案,每行 1 个。
首先,同一行内的数升序排列,相邻两个数用一个空格隔开。
其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面(例如 1 3 5 7 排在 1 3 6 8 前面)。

【数据范围】
n>0,0≤m≤n,n+(n−m)≤25

【输入样例】
5 3

【输出样例】
1 2 3 
1 2 4 
1 2 5 
1 3 4 
1 3 5 
1 4 5 
2 3 4 
2 3 5 
2 4 5 
3 4 5 

【算法分析】
所有递归,都对应一棵
递归搜索树
递归搜索树可以让我们更加容易的理解 DFS。能够更清晰观察“
”的概念。
按字典序,从4个数中选2个,得到的递归搜索树的示意图如下所示。

AcWing 93:递归实现组合型枚举 ← DFS,信息学竞赛,# 搜索算法,# STL标准库,DFS

 
【算法代码】

#include <bits/stdc++.h>
using namespace std;

const int maxn=30;
int n,m;
int path[maxn];
void dfs(int level,int start) {
    if(level>m) {
        for(int i=1; i<=m; i++) printf("%d ",path[i]);
        printf("\n");
    } else {
        for(int i=start; i<=n; i++) {
            path[level]=i;
            dfs(level+1,i+1);
        }
    }
}

int main() {
    scanf("%d %d",&n,&m);
    dfs(1,1);
    return 0;
}


/*
in:
5 3

out:
1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5
*/




【参考文献】
https://blog.csdn.net/qq_63391968/article/details/128809355
https://www.acwing.com/video/2731/


 文章来源地址https://www.toymoban.com/news/detail-631890.html

到了这里,关于AcWing 93:递归实现组合型枚举 ← DFS的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 递归实现 组合问题+排列问题(DFS)

    目录 递归实现排列型枚举 递归实现排列类型枚举 II  递归实现组合型枚举 递归实现组合型枚举 II 递归实现指数型枚举 递归实现指数型枚举 II 递归不是循环,递归利用了系统栈,只要是函数都会被系统管理。当执行到函数地址入口时就会为函数在系统栈上分配一块内存。当

    2024年02月15日
    浏览(29)
  • C/C++ 递归指数型枚举

    个人主页:仍有未知等待探索_C语言疑难,数据结构,小项目-CSDN博客 专题分栏:算法_仍有未知等待探索的博客-CSDN博客 目录 一、前言 二、递归指数型枚举 1、题目信息 题目描述 输入格式 输出格式 样例 提示  2、解析  3、代码 之前进行枚举的时候,都是进行暴力枚举的策略

    2024年02月05日
    浏览(21)
  • 蓝桥杯备赛 day 1 —— 递归 、递归、枚举算法(C/C++,零基础,配图)

    目录 🌈前言 📁 枚举的概念 📁递归的概念     例题: 1. 递归实现指数型枚举 2. 递归实现排列型枚举 3. 递归实现组合型枚举 📁 递推的概念    例题: 斐波那契数列 📁习题 1. 带分数 2. 反硬币 3. 费解的开关 📁 总结                  这篇文章主要是准备蓝桥杯竞

    2024年02月03日
    浏览(36)
  • 算法思想—枚举、递推、迭代、递归、分治、贪心、动态规划、回溯、模拟、分支定界

    算法思想 枚举(暴力算法) 枚举算法(暴力算法)是一种通过逐一尝试所有可能解来解决问题的算法。它的基本思想是将问题的所有可能答案一一列举出来,并根据一定的判断条件来确定哪些答案是合适的。这种算法通常使用循环来实现,因为需要尝试所有可能的情况。两

    2024年02月01日
    浏览(27)
  • 【LeetCode:216. 组合总和 III + 递归】

    🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文

    2024年04月25日
    浏览(26)
  • 探索C语言中的联合体与枚举:数据多面手的完美组合!

    ​ ✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C语言学习 贝蒂的主页:Betty‘s blog 联合体 又叫 共用体 ,它是一种特殊的数据类型,允许您在 相同的内存位置存储不同的数据类型 。给联合体其中⼀个成员赋值,其他成员的值也跟着变

    2024年02月19日
    浏览(30)
  • 递归算法学习——电话号码的字母组成,括号生成,组合

    目录 一,电话号码的字母组合 1.题意 2.例子 3.题目接口  4.解题代码和思路 代码: 思路: 二,括号的生成 1.题意 2.例子 3.题目接口 四,解题代码和思路 1.先写代码: 2.思路 三,组合 1.题意 2.例子 3.题目接口 4.解题代码 1.题意 给定一个仅包含数字  2-9  的字符串,返回所有

    2024年02月10日
    浏览(36)
  • 递归回溯两个例题:1.数组组合 2.在矩阵中搜索单词

    题目1:组合 给定两个整数 n 和 k ,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 输入:n = 4, k = 2 输出: [   [2,4],   [3,4],   [2,3],   [1,2],   [1,3],   [1,4], ]  解题思路: 1.定义一个temp数组,存放临时的组合结果 2.两种选择:1.选择当前元素2.不选

    2024年02月15日
    浏览(32)
  • 17.电话号码的字母组合(深度递归遍历解决经典老题)

    C++深度递归遍历解决\\\"电话号码的字母组合问题\\\",本题考察的比较全面,考察到 vector的使用,深度遍历以及递归的熟练度 ,希望能对铁子们有所帮助 链接:https://leetcode.cn/problems/letter-combinations-of-a-phone-number/ 如上图所示,以\\\"256\\\"为例,我们将三个字符串各个字符的排列组合展

    2023年04月13日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包