一些普及组会用到的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普及组常用模板简单整理的更多相关文章

  1. 常用加密算法简单整理以及spring securiy使用bcrypt加密

    一.哈希加密 1.md5加密 Message Digest Algorithm MD5(中文名为消息摘要算法第五版) https://baike.baidu.com/item/MD5/212708?f ...

  2. 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 ...

  3. 纪中10日T1 2300. 【noip普及组第一题】模板题

    2300. [noip普及组第一题]模板题 (File IO): input:template.in output:template.out 时间限制: 1000 ms  空间限制: 262144 K ...

  4. noip2017爆炸记——题解&总结&反省(普及组+提高组)

    相关链接: noip2018总结 noip2017是我见过的有史以来最坑爹的一场考试了. 今年北京市考点有一个是我们学校,我还恰好被分到了自己学校(还是自己天天上课的那个教室),于是我同时报了普及提高 ...

  5. 2017.1.16【初中部 】普及组模拟赛C组总结

    2017.1.16[初中部 ]普及组模拟赛C组 这次总结我赶时间,不写这么详细了. 话说这次比赛,我虽然翻了个大车,但一天之内AK,我感到很高兴 比赛 0+15+0+100=115 改题 AK 一.c ...

  6. [NOIP2017赛前复习第二期]复赛考试技巧与模版-普及组

    考试技巧 1.拿到考卷首先通看题目,按自己感觉的难度排序(普及一般是1-2-3-4了~还是相信出题人不会坑我们的2333) 2.一般来说,普及组前两道题比较简单(大水题啊233~),但是通常坑很多,例 ...

  7. 2017.12.10《“剑锋OI”普及组多校联盟系列赛(14)#Sooke#Kornal 的课余时间 》分析报告

    报告内容如下 - - [导语] ------ 太晚了,时间也紧,一切尽量从简吧 PS:本文题目来自剑锋OI 所以废话也不多说,进入正题吧,代码直接跟在题目后边儿,主要分析在代码前,次要的就写在代码后面 ...

  8. NOIP2012 普及组真题 4.13校模拟

    考试状态: 我今天抽签看了洛谷的… 这我能怂???凶中带吉,我怕考试??我!不!怕! 看着整个机房的男同学们,我明白我是不会触发我的忌了.很好,开刷. A. [NOIP2012普及组真题] 质因数分解 ...

  9. 转载 常用Jquery插件整理大全

    常用Jquery插件整理大全 做项目的时候总是少不了要用到Jquery插件,但是Jquery插件有太多,每次都要花费一些时间,因此本人就抽时间整理了一些Jquery插件,每个插件都有Demo或者是使用 ...

随机推荐

  1. 关系型数据库 VS NOSQL

    转载:https://mp.weixin.qq.com/s/FkoOMY8_vnqSPPTHc2PL1w 行式数据库(关系型数据库) 行式数据库有如下几个缺点: 大数据场景下 I/O 较高,因为数据是 ...

  2. lucene-solr源码编译导入eclipse--转

    https://www.jianshu.com/p/8a217ce05475 github地址:https://github.com/apache/lucene-solr 第一步:git clone ...

  3. 前后端分离demo 旅馆管理系统

    模型设计   旅馆管理系统,主要涉及到登记入住,退房以及客房和客人信息管理:经过分析抽像出涉及到的实体以及各实体之间的关系:   可以看出整个业务以客房为中心,入住,退房,定价,收费都是以客房为基本单 ...

  4. 新建 .NET Core 控制台项目

    1. 安装 .NET Core SDK 1.0 参考微软官方网站 https://www.microsoft.com/net/download/windows 2. 打开命令提示符:输入以下代码验证S ...

  5. Hadoop专有名词

    Hadoop专有名词 一. HDFS 二. MapReduce 1.MRAppMaster:MapReduce Application Master 负责整个过程调度和协调的 2.MapTask:在M ...

  6. 深入理解Java 8 Lambda(语言篇)

    State of Lambda by Brian Goetz 原文链接:http://lucida.me/blog/java-8-lambdas-insideout-language-features ...

  7. HappenBefore

    计算机芯片在操作指令的步骤: 1.获取指令 2.指令进行解码 3.去寄存器里取值 4.开始计算结果(操作) 5.将结果写会到寄存器中 执行代码的顺序可能与编写代码不一致,及虚拟机优化代码顺序,则为指令 ...

  8. python爬虫入门---第四篇:网站对爬虫的限制及突破测试

    大部分网站对网络爬虫都有限制,限制方式有两种: 一.Robots协议:二.网站通过判断对网站访问http的头部信息来查看是否是爬虫,并对爬虫做相关拦截 第一种限制是书面限制,第二种是强制性阻拦限制.那 ...

  9. sql server:Monty Hall problem (蒙提霍尔问题)

    --------------------------------------------------------------------- -- Auxiliry Table of Numbers 数 ...

  10. css中元素border属性的构成以及配合属性值transparent可得到一些特殊形状1.0

    css中我们经常使用到元素的border属性和属性值transparent,可能好多人还不太了解border的构成以及配合transparent的一些效果: 1.border的构成如下所示:   ht ...