当前位置: 首页 > ai >正文

洛谷 P1157:组合的输出 ← dfs

【题目来源】
https://www.luogu.com.cn/problem/P1157

【题目描述】
排列与组合是常用的数学方法,其中组合就是从 n 个元素中抽出 r 个元素(不分顺序且 r≤n),我们可以简单地将 n 个元素理解为自然数 1, 2, …, n,从中任取 r 个数。
现要求你输出所有组合。
例如 n=5,r=3,所有组合为:123, 124, 125, 134, 135, 145, 234, 235, 245, 345。

【输入格式】
一行两个自然数 n, r(1<n<21,0≤r≤n)。

【输出格式】
​所有的组合,每一个组合占一行且其中的元素按由小到大的顺序排列,每个元素占三个字符的位置,所有的组合也
按字典顺序

【输入样例】
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

【算法分析】
● 升序控制‌:通过 i=a[k-1]+1 确保后一个数大于前一个数,避免重复组合。

【算法代码】

#include<bits/stdc++.h>
using namespace std;int n,r,a[25];void dfs(int k) {if(k>r) {for(int i=1; i<=r; i++) printf("%3d",a[i]);printf("\n");return;}for(int i=a[k-1]+1; i<=n; i++) {a[k]=i;dfs(k+1);}
}int main() {scanf("%d%d",&n,&r);dfs(1);return 0;
}/*
in:
5 3out:1  2  31  2  41  2  51  3  41  3  51  4  52  3  42  3  52  4  53  4  5
*/





【参考文献】
https://www.luogu.com.cn/problem/solution/P1157
https://blog.csdn.net/LOSER_World/article/details/133587500




 

http://www.xdnf.cn/news/9787.html

相关文章:

  • 简单三步FastAdmin 开源框架的安装
  • 如何将图像插入 PDF:最佳工具比较
  • 45. 跳跃游戏 II
  • Vue-05(自定义事件)
  • 汽车售后诊断数据流详细分析
  • linux 安装python
  • 性能测试工具选型指南
  • 二级域名怎么申请?二级域名申请费免费吗?
  • Android Studio 解决报错 not support JCEF 记录
  • 【C/C++】chrono简单使用场景
  • 国密SSL证书有哪些技术优势?
  • 基于qt5和stk10开发的互联调试
  • 黑马程序员C++核心编程笔记--4 类和对象--封装
  • Unity中的JsonManager
  • C++双线程交替打印奇偶数(活泼版)
  • 2024 CKA模拟系统制作 | Step-By-Step | 15、查看Pod日志
  • 委托从入门到入土
  • Elasticsearch的集群管理介绍
  • 乾元通渠道商中标青海省自然灾害应急能力提升工程基层防灾项目
  • 充电便捷,新能源汽车移动充电服务如何预约充电
  • DAY 14 SHAP库的绘制
  • 2024 CKA模拟系统制作 | Step-By-Step | 12、创建多容器Pod
  • 系统安装出现的问题 老毛桃
  • 【C++】SDL2环境安装及AI编码简单的俄罗斯方块游戏
  • 阿里云服务器邮件发送失败(dail tcp xxxx:25: i/o timeout)因为阿里云默认禁用 25 端口
  • List 源码翻译
  • LeetCode 215:数组中的第K个最大元素 - 两种高效解法详解
  • npm run build 报错:Some chunks are larger than 500 KB after minification
  • 2-向量可视化
  • 【C++高级主题】命令空间(三):未命名的命名空间