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

1317:【例5.2】组合的输出

本题需要在n个元素总抽取r个元素,并输出这r个元素的所有组合,在这里我们使用dfs+回溯的算法进行求解,在dfs中我们首先枚举所有方案,然后看是否需要标记,对于这道题来说,不能重复搜索,所以我们需要判断标记并且标记没有被搜过的数字,然后进入下一层进行搜索,那么我们是否需要回溯呢,答案是需要的,例如 1 2 3 和 3 4 5,我们是需要回溯的

#include <bits/stdc++.h>

using namespace std;
int n,m;
int cnt[110];
bool vis[110];


void dfs(int start,int depth) {
	//终止
	if (depth > m) {
		for (int i = 1; i < depth; i++) {
			printf("%3d", cnt[i]);
		}printf("\n");
		return;
	}

	//枚举所有方案
	for (int i = start; i <= n;i++) {
		//查看标记-防止重复搜索
		if (!vis[i])
		{
			//搜索当前层
			cnt[depth] = i;
			//标记
			vis[i] = 1;
			//搜索下一层
			dfs(i + 1,depth + 1);
			//回溯
			vis[i] = 0;
		}
	}
}



int main() {
	
	cin >> n>>m;
	dfs(1,1);

	return 0;

}

在搜索与回溯中,我们可以进行重复性剪枝,因为题目所有要求的答案都是按照字典序进行排列的,所以我们每一次搜索都可以在上一次搜索的后面进行搜索,也就是在上一次方案的后面进行搜索。

http://www.dtcms.com/a/19868.html

相关文章:

  • Spring Boot中如何自定义Starter
  • DC-6靶机渗透测试全过程
  • matlab平面波展开法计算的二维声子晶体带隙
  • 代码讲解系列-CV(三)——Transformer系列
  • SQL 建表语句详解
  • (前端基础)HTML(二)
  • 用xml配置spring, bean标签有哪些属性?
  • 机器学习实战(3):线性回归——预测连续变量
  • 小小小病毒(3)(~_~|)
  • 51单片机-数码管
  • Java函数计算冷启动从8s到800ms的优化实录
  • Go 切片导致 rand.Shuffle 产生重复数据的原因与解决方案
  • 2024 年 9 月青少年软编等考 C 语言三级真题解析
  • 多个用户如何共用一根网线传输数据
  • docker-compose rocketmq5.1.3
  • qt-C++笔记之QGraphicsScene和 QGraphicsView中setScene、通过scene得到view、通过view得scene
  • 自助优化排名工具:智能更新网站优化
  • 考研高数复习规范
  • Linux-C/C++《七、字符串处理》(字符串输入/输出、C 库中提供的字符串处理函数、正则表达式等)
  • 《法律合唱团早新闻生成器项目上传及使用全流程文档》
  • Vue 3 30天精进之旅:Day 25 - PWA支持
  • 2025年二级建造师报名流程图解
  • 微软 Microsoft Windows Office Professional LTSC 2024 专业增强版
  • 设备智能化无线通信,ESP32-C2物联网方案,小尺寸芯片实现大功能
  • SpringBoot实战(三十二)集成 ofdrw,实现 PDF 和 OFD 的转换、SM2 签署OFD
  • ai idea配置ai写代码
  • SQL进阶能力:经典面试题
  • 【信息系统项目管理师-选择真题】2022下半年综合知识答案和详解
  • MYSQL-数据恢复与备份
  • 代码随想录算法训练营第三十八天| 动态规划02