(枚举专题)组合数枚举

枚举方式就是DFS,设置剪枝条件检查,不满足则return回溯,后面进行递归,不同的在于枚举不仅仅得到一个答案就回溯了,而是得到所有答案,因此再进行一次calc函数递归,第一个剪枝条件是为了得到m个数后输出,第二个剪枝条件是在到达最后几个数后防止剩余数不够及时return回去结束程序

c++代码:

复制代码
#include<bits/stdc++.h>
using namespace std;

//从n中取m个数,有多少种组合 
int n;
int m;

vector<int>  chosen;



void calc(int x)
{
	//剪枝 
	if(chosen.size()>m||chosen.size()+(n-x+1)<m)
	return;
	//check检查是否满足条件
	if(x-1==n)
	{
		for(int i=0;i<chosen.size();i++)
		{
			cout<<chosen[i];
		}
		puts(" ");
		return; 
	 } 
	 chosen.push_back(x);
	 calc(x+1);
	 chosen.pop_back();
	 calc(x+1);
 } 



int main()
{
	cin>>n>>m;
	calc(1);
	return 0;
 } 
相关推荐
展信佳_daydayup17 分钟前
0-1 深度学习基础——文件读取
算法
高斯林.神犇20 分钟前
冒泡排序实现以及优化
数据结构·算法·排序算法
御承扬23 分钟前
HarmonyOS NEXT系列之编译三方C/C++库
c语言·c++·harmonyos
Github项目推荐25 分钟前
跨平台Web服务开发的新选择(5802)
算法·架构
许怀楠29 分钟前
【C++】类和对象(下)
c++
danzongd40 分钟前
浅谈C++ const
c++·内存·优化·汇编语言·计算机系统·寄存器
Jolyne_2 小时前
树节点key不唯一的勾选、展开状态的处理思路
前端·算法·react.js
秋难降2 小时前
正则表达式:为什么它成了程序员的 “分水岭”?
python·算法·正则表达式
岁忧2 小时前
(LeetCode 面试经典 150 题) 104. 二叉树的最大深度 (深度优先搜索dfs)
java·c++·leetcode·面试·go·深度优先
ai2things3 小时前
MemoryOS 代码解析
算法·llm·agent