P1157 组合的输出 (dfs深搜)

题目连接:P1157 组合的输出 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)


思路:


AC代码:

cpp 复制代码
#include<iostream>
#include<cstring>

using namespace std;

const int N = 30;
int st[N];//用来存这个数用没用过(1~n个数) 
int n,r;

//求组合数,u表示当前到了哪个位置,start表示现在用到了1~n哪个数 
void dfs(int u,int start)
{
	//剪枝优化 
	if((u-1) + (n-start+1) < r) return;
	if(u>r) 
	{
		for(int i=1;i<=r;i++)
		{
			printf("%3d",st[i]);
		}
		puts("");//换行,比printf()快 
		return;
	}
	//从start开始保证了后一个数一定大于前一个数 
	for(int i=start;i<=n;i++)
	{
		st[u] = i;//标记 
		dfs(u+1,i+1);//向下搜索 
		st[u] = 0;//恢复现场 
	}
}

int main()
{
	cin >> n >> r;
	dfs(1,1);//刚开始从第一个位置和数字1开始 
	return 0;
}
相关推荐
小羊在奋斗2 分钟前
【LeetCode 热题 100】反转链表 / 回文链表 / 有序链表转换二叉搜索树 / LRU 缓存
算法·leetcode·链表
爱上彩虹c12 分钟前
LeetCode Hot100 (1/100)
算法·leetcode·职场和发展
小陈的进阶之路19 分钟前
计算机大类专业数据结构下半期实验练习题
数据结构·算法·深度优先
瑞雪兆丰年兮20 分钟前
数学实验(Matlab符号运算)
开发语言·算法·matlab·数学实验
不会计算机的捞地28 分钟前
【数据结构入门训练DAY-30】数的划分
数据结构·算法·深度优先
The_cute_cat1 小时前
试除法判断素数优化【C语言】
算法
Darkwanderor2 小时前
一般枚举题目合集
c++·算法
源远流长jerry2 小时前
右值引用和移动语义
c++
吃个糖糖2 小时前
MFC 调用海康相机进行软触发
c++·数码相机·mfc
@我漫长的孤独流浪2 小时前
最短路与拓扑(2)
数据结构·c++·算法