个人工作室如何做网站/店铺如何运营和推广
目录
算法介绍
递归实现指数型枚举
递归实现排列型枚举
递归实现组合型枚举
算法介绍
🧩DFS 即 Depth First Search ,中文又叫深度优先搜索,是一种沿着树的深度对其进行遍历,直到尽头之后再进行回溯,再走其他路线的方法,在对数据进行枚举,或求子串数量时具有奇效。该算法的实现取决于递归,因此如何设置递归的结束条件,以及什么时候调用递归便显得十分重要。
🧩通过 DFS 进行遍历,便可以无遗漏地走遍整个树,再根据题目要求在特定的位置对数据进行处理或输出。
🧩最重要的一点便是,当我们一条路走到底之后,就要回溯,就像上图中 3 5 6 步那样回到上一个节点。之后会判断是走另外一条路还是再回溯到上一层,由于在回溯前我们就已经对数据进行了处理,所以要对数据进行还原,即回溯到第一次到达这个节点时的那份数据。具体的细节就留到题目里面讲吧。
递归实现指数型枚举
传送门:AcWing 92. 递归实现指数型枚举
🧩DFS 的入门题,要求在 1~n 之间找所有可能出现的子序列的情况。可以全选也可以全部都不选,但输出的方式就比较宽松不需要特别处理。
🧩于是我们就可以将 1~n 的每一位都看作有两个选择,选和不选,用一个数组存储。每次到达叶节点的时候便完成一次枚举,并输出。而每次递归参数就加一,表示往下一层,位数的增加。注意的细节都写在代码里了,结合代码进行理解。
如果比较难想象一定要画递归图!!!!
#include<cstdio>
#include<string>
#include<iostream>
#include<algorithm>using namespace std;const int N = 15;
int n;
int sta[N]; //状态数组,表示当前位的数选或不选void dfs(int i)
{if(i == n) //位数等于n,表示所有数的状态都已确定,可以进行输出{for(int j = 1;j<=n;j++){if(sta[j] == 1){printf("%d ",j);}}puts("");return;}sta[i+1] = 1; //1表示选该数字dfs(i+1); //往下一层递归sta[i+1] = 0; //回溯后重置,但其实下面就会覆盖掉加不加没区别,只是为了好理解sta[i+1] = 2; //2表示不选dfs(i+1);sta[i+1] = 0;
}int main()
{scanf("%d",&n);dfs(0); //从第0层开始return 0;
}
递归实现排列型枚举
🧩传送门:AcWing 94. 递归实现排列型枚举
🧩依题意,一个 1~n 的整数要输出其所有的排列情况,这便于上一题不同了,上一题是每位数的相对位置都是固定的,输出长度是不固定的。但这题固定长度,但每个位的数字并不是固定的。那我们便可以从每位出发,枚举每一位可能出现的数字,但每个数字都只能出现一次。因此需要一个数组记录这个数字是否被使用过。递归结束时输出当前方案,再进行回溯。
#include<cstdio>
#include<string>
#include<iostream>
#include<algorithm>using namespace std;const int N = 10;
int n,count;
int sta[N]; //用于存储方案
bool used[N]; //有没有被用过void dfs(int i)
{if(i>n) //从1开始递归则判断条件为i>n从0开始则是i=n结束递归{for(int j = 1;j<=n;j++) printf("%d ",sta[j]); //输出puts("");return;}for(int j = 1;j<=n;j++) //寻找还没有用过的数{if(!used[j]) //true表示用过,false表示未用{sta[i] = j; //i位置选jused[j] = true; //标记j已使用dfs(i+1); //往下一位递归used[j] = false; //回溯后当前位就不使用了于是置为false}} //之后继续寻找下一个没有用过的数
}int main()
{scanf("%d",&n);dfs(1);return 0;
}
递归实现组合型枚举
🧩传送门:AcWing 93. 递归实现组合型枚举
🧩这题就有点像上面两题的结合版,给定 1~n 的范围输出指定长度的从小到大的全部排列。要注意的是输出的情况是严格递增的,即不会出现中途有数字小于前面数字的情况。所以在查找没用过的数字时,需要从上一位加一开始查找。只有位数达到标准了才输出,因此会筛选掉一些不符合要求的答案。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>using namespace std;const int N = 26;
int n, m;
int sta[N]; //用于存储方案
bool used[N]; //有没有被用过
void dfs(int x)
{if (x > m) //位数符合,可以输出{for (int i = 1; i <= m; i++){printf("%d ", sta[i]);}printf("\n");return;}for (int i = sta[x - 1] + 1; i <= n; i++) //由于输出是严格递增的由此当前位一定比上一位大{if (!used[i]) //当前数未被用则进行操作,否则跳过{sta[x] = i; //当前位置选iused[i] = true; //标记当前位置已使用dfs(x + 1); //向下递归used[i] = false; //状态回溯}} //之后继续寻找下一个没有用过的数
}int main()
{scanf("%d%d", &n, &m);dfs(1);return 0;
}
🧩好了这次DFS的入门讲解到这里就结束了,如果对你有用的话还请留下你的三连加关注。算法的学习还是建立在多练习上,学会了思想还需要多多实践才能熟练地掌握。
相关文章:

手把手学会DFS (递归入门)
目录 算法介绍 递归实现指数型枚举 递归实现排列型枚举 递归实现组合型枚举 算法介绍 🧩DFS 即 Depth First Search ,中文又叫深度优先搜索,是一种沿着树的深度对其进行遍历,直到尽头之后再进行回溯,再走其他路线的…...

由《三体》太阳文明末日场景想到的……
《三体》电视剧正在热播,热度持续不退,豆瓣评分8.6,基本已经预定年度口碑最高的科幻题材剧;除了在国内多个平台播出外,还走出国门,成功“出海”,《人民日报》两会特刊都予以了高度赞扬。 上图红…...

es6的Proxy与Reflect
Proxy是在对目标对象的读取时,架设一层拦截,可以在读取对象中的任意一个属性时做一些额外的操作 Proxy与Object.defineProperty方式设置setter、getter方法不同的是,Proxy是对目标对象的整体拦截,而Object.defineProperty注重对对…...

Linux环境部署vue项目 + nginx访问(包含nginx配置简介)
1、本地打包、上传 # 打包命令不同项目有略微差别,核心命令 npm run build# 我们项目前端给配了测试、生产环境,测试环境打包命令是 npm run build:stage# 建议先看一下项目的README文件打包之后,得到一个文件夹,一般叫dist、也有…...

到底什么是跨域,如何解决跨域(常见的几种跨域解决方案)?
文章目录1、什么是跨域2、解决跨域的几种方案2.1、JSONP 方式解决跨域2.2、CORS 方式解决跨域(常见,通常仅需服务端修改即可)2.3、Nginx 反向代理解决跨域(推荐使用,配置简单)2.4、WebSocket 解决跨域2.5、…...

pm3包1.4版本发布----一个用于3组倾向性评分的R包
目前,本人写的第二个R包pm3包的1.4版本已经正式在CRAN上线,用于3组倾向评分匹配,只能3组不能多也不能少。 可以使用以下代码安装 install.packages("pm3")什么是倾向性评分匹配?倾向评分匹配(Propensity Sc…...

没有关系的话,那就去建立关系吧
今天给大家分享一道链表的好题--链表的深度拷贝,学会这道题,你的链表就可以达到优秀的水平了。力扣 先来理解一下题目意思,即建立一个新的单向链表,里面每个结点的值与对应的原链表相同,并且random指针也要指向新链表中…...

Vue项目
package.json : 描述这个NPM包的所有相关信息,包括作者、简介、包依赖、构建等信息,格式是严格的JSON格式。和java的maven的pom文件作用一样。 node_modules: 依赖需要下载后才能使用,存在依赖包的地方。使用npm install 安装依赖 babel.co…...

【webrtc】ICE 到VCMPacket的视频内存分配
ice的数据会在DataPacket 构造是进行内存分配和拷贝而后DataPacket 会传递给rtc模块处理rtc模块使用DataPacket 构造rtp包最终会给到OnReceivedPayloadData 进行rtp组帧。吊炸天的是DataPacket 竟然没有声明析构方法。RtpVideoStreamReceiver::OnReceivedPayloadData 的内存是外…...

进阶C语言——指针(二)【题目练习】
文章目录1.指针和数组概念的理解2.指针和数组笔试题解析一维数组字符数组二维数组1.指针和数组概念的理解 指针和数组 数组:能够存放一组相同类型的元素,数组的大小取决于数组的元素个数和元素类型指针:也是地址或指针变量,大小是…...

Ajax简介
Ajax简介和使用 1.简介 AJAX Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。 AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。 Ajax 不是一种新的编程语言,而是一种用于创建更好更快以及…...

ChatGPT 4 测试 两数比较大小问题。
按: 上次用3.5 测试了ChatGPT的两数比较大小问题,结果失败了。我要求不能用if语句,它避免不了。这次终于成功了,看来是进步很大。对话记录如下(英文) MaraSun Compare two 2 numbers in C# , but IF is no…...

SSM-CRUD整合视频教程:Spring、SpringMVC、MyBatis、bootstrap、pagehelper、JSR303后端校验
1、项目说明 1.1、业务说明 SSM:SpringMVCSpringMyBatisCRUD: Create(创建)Retrieve(查询)Update(更新)Delete(删除) 总结:通过SSM框架来完成一个CRUD的操作。 1.2、功…...

Linux常用命令——基于Ubuntu22.04
本文介绍了一些Linux的常用命令。为了便于快速检索命令位置,文章二级标题都以“命令:命令的作用”展示,有些命令会先介绍命令的几个常用参数,然后结合具体的操作展示命令的使用。为了便于记忆,也会提到命令是由哪些短语…...

Sentinel
SentinelSentinel介绍什么是Sentinel?为什么需要流量控制?为什么需要熔断降级?一些普遍的使用场景本文介绍参考:Sentinel官网《Spring Cloud Alibaba 从入门到实战.pdf》Sentinel下载/安装项目演示构建项目控制台概览演示之前需先明确&#…...

再也不想去字节跳动面试了,6年测开面试遭到这样打击.....
前几天我朋友跟我吐苦水,这波面试又把他打击到了,做了快6年软件测试员。。。为了进大厂,也花了很多时间和精力在面试准备上,也刷了很多题。但题刷多了之后有点怀疑人生,不知道刷的这些题在之后的工作中能不能用到&…...

【深度解刨C语言】符号篇(全)
文章目录一.注释二.续行符与转义符1.续行符2.转义符三.回车与换行四.逻辑操作符五.位操作符和移位操作符六.前置与后置七.字符与字符串八./和%1.四种取整方式2.取模与取余的区别和联系3./两边异号的情况1.左正右负2.左负右正九.运算符的优先级一.注释 注释的两种符号ÿ…...

VS Code 将推出更多 AI 功能给 Java 开发者
大家好,欢迎来到我们的二月更新!我们将为您带来与 JUnit 5 并行测试相关的新功能以及用于 Spring Boot Dashboard 的过滤功能。另外,OpenAI 和 ChatGPT 是最近的热点,所以在 GitHub Copilot 方面也有一些令人激动的消息࿰…...

关于利用FFT分析时域信号幅相的思考与验证
引言 利用FFT分析/估计时域信号的幅度和相位,属于传统估计的范畴。估计的准确程度受频率分辨率的影响较大。如果被估计的目标频率等于频率分辨率的整数倍,信号的幅相估计都是最准确的。一旦目标频率不等于频率分辨率的整数倍,幅度估计值将会…...

基于java中的Springboot框架实现餐厅点餐系统展示
基于java中的Springboot框架实现餐厅点餐系统开发语言和工具 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 21世纪的今天,随着社会的不断发展与进步,人们对…...

案例07-在线人员列表逻辑混乱
一、背景介绍 在线人员列表涉及到的问题: 类中写了公共变量最后导致数据混乱现象 保存数据没有考虑业务的隔夜覆盖导致的逻辑漏洞 涉及到继承,对于this,如果父类有同样的成员最终使用哪一个? 参数不一致导致后续维护混乱 mysql由…...

Java集合框架
Java集合框架是Java编程语言所提供的一种便捷的数据结构的实现。Java集合框架提供了一种统一的接口和机制来访问和操作集合中的元素,这些元素可以是对象、基本数据类型或其他集合。Java集合框架是Java应用程序中最常用的特性之一,它为开发人员提供了许多…...

奇异值分解(SVD)原理与在降维中的应用
奇异值分解(SVD)原理与在降维中的应用 奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域。是很多机器学习算…...

GDB调试程序
1.GDB 调试程序 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。在UNIX平台下做软件,GDB这个调试工具有比VC的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。 一般来说,GDB主要帮忙你完成下面四个方面的功能…...

五种IO模型
用户空间与内核空间 操作系统把内存空间划分成了两个部分:内核空间和用户空间。 为了保护内核空间的安全,操作系统一般都限制用户进程直接操作内核。 所以,当我们使用TCP发送数据的时候,需要先将数据从用户空间拷贝到内核空间&a…...

5 全面认识java的控制流程
全面认识java控制流程1.块作用域2.条件语句3.迭代语句3.1while语句3.2do-while语句3.3for语句3.4 for-in语法4.中断控制流程的语句4.1 return4.2 break和continue4.2.1 不带标签的break语句4.2.2 带标签的break语句4.2.3 continue语句4.3 goto()5.多重选择:switch语句1.块作用域…...

第二章 测验【嵌入式系统】
第二章 测验【嵌入式系统】前言推荐第二章 测验【嵌入式系统】最后前言 以下内容源自《嵌入式系统》 仅供学习交流使用 推荐 第一章 测验【嵌入式系统】 第二章 测验【嵌入式系统】 1单选题 32bit宽的数据0x12345678 在小端模式(Little-endian)模式…...

排序算法之插入排序
要考数据结构了,赶紧来复习一波排序算法 文章目录一、直接插入排序二、希尔排序一、直接插入排序 直接上主题 插排,揪出一个数,插入到原本已经有序的数组里面,如数组有n个数据,从0~n下标依次排列,先从左往…...

Kaggle实战入门:泰坦尼克号生生还预测
Kaggle实战入门:泰坦尼克号生生还预测1. 加载数据2. 特征工程3. 模型训练4. 模型部署泰坦尼克号(Titanic),又称铁达尼号,是当时世界上体积最庞大、内部设施最豪华的客运轮船,有“永不沉没”的美誉ÿ…...

【大汇总】11个Python开发经典错误(1)
“但是太阳,他每时每刻都是夕阳也都是旭日。当他熄灭着走下山去收尽苍凉残照之际,正是他在另一面燃烧着爬上山巅散烈烈朝晖之时。” --------史铁生《我与地坛》 🎯作者主页:追光者♂🔥 🌸个人简介:计算机专业硕士研究生💖、2022年CSDN博客之星人工智能领…...