DFS普及组常用模板简单整理

一些普及组会用到的DFS模板,其他的DFS我感觉普及组不会用到所以暂且搁着,等之后有时间了再细写w
(至于我为什么最近不写TG相关只写最基础的PJ的内容,请戳这里了解)
dfs各种模板big集合
1. dfs框架
#include<bits/stdc++.h>
using namespace std;
int n, m;//n:有几个数 m:要几个
bool used[ ];//是否用过
int ans[ ];//答案
void dfs(int u){
if (出局判断){//到头就走
做要做的事
return ;//退出
}
for (int i = 开始的地方; i <= n; i++)//从上一个数开始依次增加,枚举每一种情况
if (used[i] == 0) {//判断是否用过
加入结果 设为用过
dfs(u + 1);//下一个数字
回溯:回到没用过
}
return ;//退出
}
int main(){
输入 初始化
dfs(1);//开始搜索,从1开始
return 0;
}
2. dfs全排列
#include<bits/stdc++.h>
using namespace std;
int n;//有几个数
bool used[10];//是否用过
int ans[10];//答案
void dfs(int u){//u表示上一个
if (u == n + 1){//到头就走
for (int i = 1; i <= n; i++) printf("%d ", ans[i]);//输出*1
printf("\n");//输出*2
return ;//退出
}
for (int i = 1; i <= n; i++)//枚举每一种情况
if (used[i] == 0)//判断是否用过
{
ans[u] = i;//加入结果
used[i] = 1;//设为用过
dfs(u + 1);//下一个数字
used[i] = 0;//回溯:回到没用过
}
return ;//退出
}
int main(){
cin>>n;//输入
memset(used, 0, sizeof(used));//记得清零
dfs(1);//开始搜索,从1开始
return 0;
}
3. dfs组合+判断素数
#include<bits/stdc++.h>
using namespace std;
int n, m;//n:有几个数 m:要几个
int a[30];//数字
int ans = 0;//方案个数
bool prime(int d) //素数检测
{
int s = sqrt(d);
for (int i = 2; i <= s; i++)
if (d % i == 0) return 0;
return 1;
}
void dfs(int u, int opt, int sum){
if (u == m + 1)//到头就走
{
if (prime(sum))//判断是否为素数
ans++;
return ;//退出
}
for (int i = opt + 1; i <= n; i++)//从上一个下标开始依次增加,枚举每一种情况
dfs(u + 1, i, sum + a[i]);//下一个数字
return ;//退出
}
int main(){
scanf("%d %d", &n, &m);//输入
for (int i = 1; i <= n; i++) scanf("%d", &a[i]); //输入
dfs(1, 0, 0);//开始搜索,从1开始
printf("%d", ans);
return 0;
}
4.dfs排列问题
#include<bits/stdc++.h>
using namespace std;
int n, m;//n:有几个数 m:要几个
bool used[10];//是否用过
int ans[10];//答案
void dfs(int u){
if (u == m + 1)//到头就走
{
for (int i = 1; i <= m; i++) printf("%d ", ans[i]);//输出*1
printf("\n");//输出*2
return ;//退出
}
for (int i = 1; i <= n; i++)//枚举每一种情况
if (used[i] == 0)//判断是否用过
{
ans[u] = i;//加入结果
used[i] = 1;//设为用过
dfs(u + 1);//下一个数字
used[i] = 0;//回溯:回到没用过
}
return ;//退出
}
int main()
{
scanf("%d %d", &n, &m);//输入
memset(used, 0, sizeof(used));//记得清零
dfs(1);//开始搜索,从1开始
return 0;
}
5.dfs组合问题
#include<bits/stdc++.h>
using namespace std;
int n, m;//n:有几个数 m:要几个
bool used[30];//是否用过
int ans[30];//答案
void dfs(int u){
if (u == m + 1)//到头就走
{
for (int i = 1; i <= m; i++) printf("%d ", ans[i]);//输出*1
printf("\n");//输出*2
return ;//退出
}
for (int i = ans[u - 1] + 1; i <= n; i++)//从上一个数开始依次增加,枚举每一种情况
if (used[i] == 0)//判断是否用过
{
ans[u] = i;//加入结果
used[i] = 1;//设为用过
dfs(u + 1);//下一个数字
used[i] = 0;//回溯:回到没用过
}
return ;//退出
}
int main(){
scanf("%d %d", &n, &m);//输入
memset(used, 0, sizeof(used));//记得清零
ans[0] = 0;//重点:注意当u=1时的极限情况清零
dfs(1);//开始搜索,从1开始
return 0;
}
注:本文模板来源参考于大佬笔记
(这个大佬的BLOG里全部都是干货全部都是精品我强烈推荐!!!)
DFS普及组常用模板简单整理的更多相关文章
- 常用加密算法简单整理以及spring securiy使用bcrypt加密
一.哈希加密 1.md5加密 Message Digest Algorithm MD5(中文名为消息摘要算法第五版) https://baike.baidu.com/item/MD5/212708?f ...
- dfs與bfs常用模板
基本遍歷: //dfs void dfs(int x) { v[x]=1; for(int i=head[x];i;i=next[i]) { int y=ver[i]; if(v[y]) contin ...
- 纪中10日T1 2300. 【noip普及组第一题】模板题
2300. [noip普及组第一题]模板题 (File IO): input:template.in output:template.out 时间限制: 1000 ms 空间限制: 262144 K ...
- noip2017爆炸记——题解&总结&反省(普及组+提高组)
相关链接: noip2018总结 noip2017是我见过的有史以来最坑爹的一场考试了. 今年北京市考点有一个是我们学校,我还恰好被分到了自己学校(还是自己天天上课的那个教室),于是我同时报了普及提高 ...
- 2017.1.16【初中部 】普及组模拟赛C组总结
2017.1.16[初中部 ]普及组模拟赛C组 这次总结我赶时间,不写这么详细了. 话说这次比赛,我虽然翻了个大车,但一天之内AK,我感到很高兴 比赛 0+15+0+100=115 改题 AK 一.c ...
- [NOIP2017赛前复习第二期]复赛考试技巧与模版-普及组
考试技巧 1.拿到考卷首先通看题目,按自己感觉的难度排序(普及一般是1-2-3-4了~还是相信出题人不会坑我们的2333) 2.一般来说,普及组前两道题比较简单(大水题啊233~),但是通常坑很多,例 ...
- 2017.12.10《“剑锋OI”普及组多校联盟系列赛(14)#Sooke#Kornal 的课余时间 》分析报告
报告内容如下 - - [导语] ------ 太晚了,时间也紧,一切尽量从简吧 PS:本文题目来自剑锋OI 所以废话也不多说,进入正题吧,代码直接跟在题目后边儿,主要分析在代码前,次要的就写在代码后面 ...
- NOIP2012 普及组真题 4.13校模拟
考试状态: 我今天抽签看了洛谷的… 这我能怂???凶中带吉,我怕考试??我!不!怕! 看着整个机房的男同学们,我明白我是不会触发我的忌了.很好,开刷. A. [NOIP2012普及组真题] 质因数分解 ...
- 转载 常用Jquery插件整理大全
常用Jquery插件整理大全 做项目的时候总是少不了要用到Jquery插件,但是Jquery插件有太多,每次都要花费一些时间,因此本人就抽时间整理了一些Jquery插件,每个插件都有Demo或者是使用 ...
随机推荐
- mysql 查看建表语句
show create table `table_name`; 结果如下:
- 使用BizTalk实现RosettaNet B2B So Easy
使用BizTalk实现RosettaNet B2B So Easy 最近完成了一个vmi-hub的B2B项目,使用Rosettanet 2.0的标准与一家品牌商,OEM,供应商实现B2B.一共交换4个 ...
- 国内高速Maven仓库
<mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> & ...
- System V 与 POSIX 简介与对比
当我们在 Linux 系统中进行进程间通信时,例如信号量,消息队列,共享内存等方式,会发现有System V以及POSIX两种类型.今天我们就来简单介绍下它们. POSIX: POSIX(Portab ...
- 比较两个DataTable是否相等
/// <summary> /// 比较两个DataTable内容是否相等,先是比数量,数量相等就比内容 /// </summary> ...
- [转]npm、 cnpm、yarn
本文转自:https://blog.csdn.net/sinat_34682450/article/details/79473658 终于搞懂了三者之间的关系- 要知道三者之间的关系首先要了解三个包管 ...
- centos6.5修改yum安装的mysql默认目录
0.说明 Linux下更改yum默认安装的mysql路径datadir. linux下,MySQL默认的数据文档存储目录为/var/lib/mysql. 假如要把MySQL目录移到/home/data ...
- String,StringBuilder, StringBuffer
String:适用于少量的字符串操作的情况 StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况 StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
- windows下mysql-5.7.18安装
在官网下载了mysql压缩包,按照官网:https://dev.mysql.com/doc/refman/5.7/en/windows-installation.html的教程安装,但是出错,后面根据 ...
- SQL Server Service Broker(简称SSB)资料
SQL server Service Broker (下面简称SSB) 是SQL server 里面比较独特的一个功能.它可帮助开发人员构建异步的松散耦合应用程序.SSB的一些功能和好处包括有: 数据 ...