一些普及组会用到的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. Hadoop项目实战-用户行为分析之编码实践

    1.概述 本课程的视频教程地址:<用户行为分析之编码实践> 本课程以用户行为分析案例为基础,带着大家去完成对各个KPI的编码工作,以及应用调度工作,让大家通过本课程掌握Hadoop项目的编 ...

  2. Redis 哨兵

    作用 Redis Sentinel,即Redis哨兵,在Redis 2.8版本开始引入. 主要提供了配置提供者,通知,哨兵的监控和自动故障转移功能.哨兵的核心功能是主节点的自动故障转移. 下面是Red ...

  3. Storm 性能优化

    目录 场景假设 调优步骤和方法 Storm 的部分特性 Storm 并行度 Storm 消息机制 Storm UI 解析 性能优化 场景假设 在介绍 Storm 的性能调优方法之前,假设一个场景:项目 ...

  4. php处理文件的思考(去除空行、每行多余字符)

    1.去除空行 <?php $str = file_get_contents('a.txt'); $str = explode(PHP_EOL, $str); //分割为数组,每行为一个数组元素 ...

  5. linux 双网卡桥接,实现网卡流量镜像与转发

    确认本地是否存在brctl,如果不存在请先安装: 1.确定你的镜像端口,比如eth1: 2.将实际数据通过的端口,比如eth0和镜像端口绑成一个bridge: brctl addbr br0 brct ...

  6. Java Generator

    以前我以为只有Python才会有generator,看来当时的我才年轻,后来认真研读<Thinking in Java>之后大有感悟,原来Java亦有generator,故做一次记录分享. ...

  7. java中Map集合的理解

    Map |--Hashtable:底层是哈希表数据结构,不可以存入null键null值.该集合是线程同步的.jdk1.0.效率低. |--HashMap:底层是哈希表数据结构,允许使用 null 值和 ...

  8. [转]ionic3 实现android版本打包

    本文转自:https://blog.csdn.net/weixin_39461487/article/details/79387250?utm_source=blogxgwz0 版权声明:本文为博主原 ...

  9. 移动端地区选择控件mobile-select-area

    由于之前的[js开源组件开发]js手机联动选择地区仿ios 开源git 很受欢迎,于是我又对其进行了一些优化,包括可选的范围变大了,添加了默认空首地址的功能,也添加了更多api参数,首先我们先来看下这 ...

  10. Ajax提交用FormData()上传文件

    1.form声明如下 2.ajax设置如下 var formData = new FormData(document.getElementById("form")); $.ajax ...