(枚举专题)组合数枚举

枚举方式就是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;
 } 
相关推荐
HHRL-yx1 小时前
C++-linux系统编程 11.常见问题与答案
linux·c++
Jay Kay2 小时前
CMake综合学习2: 构建高效可靠的C++中型服务项目以及现代CMake全链条指南
c++·学习
The Mr.Nobody2 小时前
高性能上位机界面设计范式:C#与C++/C开发调试无缝衔接
c语言·c++·c#
遇见尚硅谷8 小时前
C语言:20250712笔记
c语言·开发语言·数据结构
☞下凡☜8 小时前
C语言(20250711)
linux·c语言·开发语言
404未精通的狗8 小时前
(数据结构)复杂度
数据结构
二进制person8 小时前
数据结构--准备知识
java·开发语言·数据结构
地平线开发者8 小时前
理想汽车智驾方案介绍专题 1 端到端+VLM 方案介绍
算法·自动驾驶
地平线开发者8 小时前
征程 6 | UCP 任务优先级/抢占简介与实操
算法·自动驾驶
xiaofann_8 小时前
【数据结构】双向链表
数据结构·链表