首页 > 编程语言 >【深搜】桐桐的组合(devc++)

【深搜】桐桐的组合(devc++)

时间:2024-10-26 14:46:46浏览次数:7  
标签:桐桐 dfs 盒子 组合 标记 int dev vis c++

【问题描述】

排列与组合是常用的数学方法,桐桐刚刚学会了全排列,就想试试组合,组合就是从 n 个元素中抽出r个元素(不分顺序且 r≤n),我们可以简单地将 n 个元素理解为自然数1,2,…,n ,从中任取 r 个数。

【输入格式】

两个整数 n 和r(1≤r≤n≤20)。

【输出格式】

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

【输入样例】

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

代码:

#include<bits/stdc++.h>
using namespace std;
int n,r;
int a[21],vis[21];//a数组表示盒子,存当前放得数。vis表示是否被标记,1表示已标记,0表示未标记 
void dfs(int x)//x:盒子的编号 
{
	if(x>r)//放好了r+1个盒子,到达目的地
	{
		for(int i=1;i<=r;i++)
		{
			printf("%3d",a[i]);
		 } 
		 printf("\n"); 
		return ; 
	}
	for(int i=1;i<=n;i++)
	{
		if(vis[i]==0 and i>a[x-1])//如果vis[i]==0,表示没用过,并且(放进盒子里得数 >上一个数) 
		{
			a[x]=i;//表示第x个盒子放i
			vis[i]=1;//标记为1 
			dfs(x+1);
			vis[i]=0;//回溯,释放标记i 
			 
		}
	}
}
int main()
{
	cin>>n>>r;
	dfs(1);
	return 0;
}

标签:桐桐,dfs,盒子,组合,标记,int,dev,vis,c++
From: https://blog.csdn.net/jiaomoxuan/article/details/143253389

相关文章

  • C++试卷带答案
    选择题(1)关于重载函数在调用时匹配依据的说法中,错误的是 (1)  。A)参数个数        B)参数的类型       C)函数名字        D)函数的类型(2)下面对友元函数描述正确的是(2)。A)友元函数的实现必须在类的内部定义B)友元函数是类的成员函......
  • Nuxt.js 应用中的 server:devHandler 事件钩子详解
    title:Nuxt.js应用中的server:devHandler事件钩子详解date:2024/10/26updated:2024/10/26author:cmdragonexcerpt:server:devHandler是Nuxt.js中的一个生命周期钩子,它在Nitro开发服务器注册开发中间件时被调用。使用这个钩子,开发者可以为开发服务器添加......
  • 【C++】map和set的使用
    最好的,不一定是最合适的;最合适的,才是真正最好的。......
  • Nuxt.js 应用中的 server:devHandler 事件钩子详解
    title:Nuxt.js应用中的server:devHandler事件钩子详解date:2024/10/26updated:2024/10/26author:cmdragonexcerpt:server:devHandler是Nuxt.js中的一个生命周期钩子,它在Nitro开发服务器注册开发中间件时被调用。使用这个钩子,开发者可以为开发服务器添加自定义......
  • C++:继承与多态(面试题篇)
    文章目录前言1.什么是多态?2.什么是重载、重写(覆盖)、重定义(隐藏)?3.多态的实现原理?4.inline函数可以是虚函数吗?5.静态成员可以是虚函数吗?6.构造函数可以是虚函数吗?7.析构函数可以是虚函数吗?什么场景下析构函数是虚函数?8.对象访问普通函数快还是虚函数更快?9.虚......
  • C++中vector的使用方法
    1包含头文件和命名空间首先,在使用vector之前,需要包含<vector>头文件。在C++中,如果使用标准命名空间,还需要加上usingnamespacestd;语句(不过这种全局使用命名空间的方式在大型项目中可能会引起命名冲突,也可以只使用std::vector来明确指定是标准库中的vector类型)。示例:#......
  • C++各版本引入的新特性
    作者:momo链接:https://www.zhihu.com/question/355400393/answer/3245544440来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。以下是C++各个版本的标准库特性:C++98:引入了以下新的库特性:RTTI(运行时类型信息),包括dynamic_cast和typeid类型转换......
  • 每日OJ题_牛客_NC383主持人调度(一)_排序​_C++_Java
    目录牛客_NC383主持人调度(一)_排序题目解析C++代码Java代码牛客_NC383主持人调度(一)_排序主持人调度(一)_牛客题霸_牛客网(nowcoder.com)描述:        有n 个活动即将举办,每个活动都有开始时间与活动的结束时间,第i 个活动的开始时间是starti ,第i 个活动......
  • 详解c++中的set_difference函数
    set_difference功能描述:求两个集合的差集函数原型:set_difference(iteratorbeg1,iteratorend1,iteratorbeg2,iteratorend2,iteratordest);//求两个集合的差集//注意:两个集合必须是有序序列//beg1容器1开始迭代器//end1容器1结束迭代器//beg2容......
  • C++之内存管理与模板初级
    内容介绍Ⅰ.C++内存管理1.C/C++内存分布2.C与C++动态内存管理方式对比2.1C中动态内存管理方式2.2C++中内存管理方式3.new和delete的底层实现原理(了解)Ⅱ.模板初阶1.模板介绍2.函数模板3.函数模板参数匹配原则4.类模板Ⅰ.C++内存管理1.C/C++内存分布intn1=1;......