组合的输出(回溯、dfs)
问题 O: 【回溯法】组合的输出
题目描述
现要求你不用递归的方法输出所有组合。
例如n=5,r=3,所有组合为:
l 2 3 l 2 4 1 2 5 l 3 4 l 3 5 1 4 5 2 3 4 2 3 5 2 4 5 3 4 5
输入
输出
样例输入
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
这个题是典型的回溯,让我对回溯的清空状态有了一定的理解,写成了dfs。
代码如下:
#include <bits/stdc++.h>
int n,r,a[];
bool vis[];// 来记录各个数字是否被访问
using namespace std;
void dfs (int dep)//dep代表搜索的深度,即当前数组a添加了多少个数
{
for (int i=a[dep-]+;i<=n;++i)//从上一个添加的数+1开始搜索数字
{
if (!vis[i])//如果这个数字没被访问过
{
a[dep]=i;//将这个数字添加到a里面去
if (dep==r)//如果添加的数字达到r个,把他们输出
{
for (int j=;j<=r;++j)
printf("%3d",a[j]);
printf("\n");
}
else
dfs(dep+);//如果达不到r个继续添加
vis[i]=;//回溯,清空当前状态,把vis[i]设为没有访问过。
}
}
}
int main()
{
while (~scanf("%d%d",&n,&r))
{
memset(a,,sizeof a);
memset(vis,false,sizeof vis);
dfs();//写成dfs很巧妙
}
return ;
}
/*
Time:12 ms
Memory:1696 kb
*/
组合的输出(回溯、dfs)的更多相关文章
- 【递归入门】组合的输出:dfs
题目描述 排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r < = n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数. 现要求你不用递归的方 ...
- 组合的输出(DFS)
题目描述: 排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r<=n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数. 现要求你用递归的方法输出 ...
- 图解Leetcode组合总和系列——回溯(剪枝优化)+动态规划
Leetcode组合总和系列--回溯(剪枝优化)+动态规划 组合总和 I 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 ...
- 洛谷P1157 组合的输出
洛谷1157 组合的输出 题目描述 排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r<=n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数. ...
- 洛谷 P1157 组合的输出
P1157 组合的输出 题目描述 排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r<=n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数. 现 ...
- P1157 组合的输出
P1157 组合的输出 #include <bits/stdc++.h> using namespace std; int n,r; int a[25]; vector<int> ...
- 【递归】P1157组合的输出
题目相关 题目描述 排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且 r ≤n),我们可以简单地将n个元素理解为自然数1,2,-,n从中任取r个数. 现要求你输出所有组合. ...
- (Java实现) 组合的输出
问题 B: [递归入门]组合的输出 时间限制: 1 Sec 内存限制: 128 MB 题目描述 排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r < = n),我们 ...
- 欧拉回路输出(DFS,不用回溯!)Watchcow POJ 2230
Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 8109 Accepted: 3551 Special Judge D ...
随机推荐
- PowerShell 字符串操作--转载
格式化操作符 –F 在PowerShell文本操作符中非常重要,经常被用来增强数字类型和日期类型的可读性: "{0} diskettes per CD" -f (720mb/1.4 ...
- Netty精进01
为什么要学习Netty? 目前基于Netty实现的一些优秀的开源框架:Dubbo.RocketMQ.Spark.Spring5.Flink.ElasticSearch.gRPC……这些还说明不了为什么 ...
- vue- 指令v-if 与指令v-show的区别
区别1: v-if :可以根据表达式的值在DOM中生成或移除一个元素. v-show:可以根据表达式的值来显示或者隐藏HTML元素.当v-show赋值为false时,元素被隐藏,此时查看代码时,该元素 ...
- 阻塞进程函数 wait()和waitpid()
1. wait()和waitpid()函数说明 wait() 进程一旦调用了wait(), 就立即阻塞自己,由wait自动分析是否有当前进程的某个子进程已经退出,如果让它找到了一个已经变成僵尸的子进 ...
- Aizu - ALDS1_4_C Dictionary
Search III Your task is to write a program of a simple dictionary which implements the following ins ...
- jvm 更多链接
http://www.cnblogs.com/dingyingsi/p/3760447.html : 讲解 jvm https://blog.csdn.net/Luomingkui1109/a ...
- thymeleaf 下拉选框回显选中
参考了许多,最后以这种方法实现了.尽管有些愚蠢,初步学习阶段.不知道为什么用th:field会报错.网上有些是用field来解决回显问题的. <select name="positio ...
- 虚拟机环境搭建/修改VMware虚拟机固定IP
VMware Workstation安装CentOS7.0 详情教程: centos7.0下载地址:http://isoredirect.centos.org/centos/7/isos/x86_64 ...
- 终端参数上报后,平台通过tcp协议接收到相应数据并处理。
终端将终端参数以json格式的数据发送至平台.终端上电后上报,可以不认证直接上报. 实现流程如下. 1.设置终端参数上报的协议类型,例如:0x0000. public static final int ...
- Pandas案例--人口密度分析
需求: 导入文件,查看原始数据 将人口数据和各州简称数据进行合并 将合并的数据中重复的abbreviation列进行删除 查看存在缺失数据的列 找到有哪些state/region使得state的值为N ...