DFS算法(回溯搜索)

核心作用: "一条路走到黑" 的规矩,把所有可能的情况都过一遍,要么找出符合要求的结果,要么完成对所有节点的遍历统计

什么情况用?

当题目或者需求具备以下特点即可使用DFS算法

只要符合(计数需求 + 多步选择),不管有没有约束条件,都可以用 DFS

1.计数

  • 关键词:有多少种/多少种方案/多少种顺序/多少条路径/多少种组合

2.多步选择

  • 步数关键词N次/N步/N个/依次/按顺序/从...到...(表示动作要分多次完成,有先后);
  • 选择关键词有X种/类/个/可选A/B/C/从...中选/每次选一个(表示每一次动作,有多个选项可选)

3.约束条件

关键词(题目里带「不 / 必须 / 只能」的句子):

不能.../必须.../只能.../最多.../最少.../恰好.../不重复...

4.需要回溯

只要满足(计数需求)+ (多步选择)→ 必然需要回溯,DFS 会自动完成;

代码部分

计数代码必须写在类名下面,所有方法名之外,且需要加修饰符static

DFS算法的方法是需要自定义的,关于参数部分如下:

1. 先填「递归终止型参数」:唯一且核心的作用是「触发递归的终止条件」------ 没有该参数,递归无法知道何时停止,会陷入无限循环。

  • 从题目中提取「递归的最终目标」(即:完成什么任务后,递归可以停止?);
  • 寻找「能精准描述「当前状态距离最终目标还差多少」的状态信息」;
  • 验证:该信息能否「直接构成递归的终止条件」(即:当该信息达到「最终目标阈值」时,可直接终止递归),能则作为参数。

例如:

1.考试必须考到60分才及格

自定义终止参数:int step(当前分数)

终止条件就是:step == 60

2.从(0,0)走到(3,4)

自定义终止参数:int x(当前横坐标)int y(当前纵坐标)

终止条件就是:x == 3 && y == 4

3.遍历完「ABC」所有字符

自定义终止参数:int index(当前遍历到的字符索引)

终止条件就是:index == 2

2.再填「约束参数」

一般两种类型

1.当前一步选择的参数

例如:总共有[A\B]两个选项,A用1表示,B用2表示

自定义参数:int last

我这一步选择了B

那么last == 2

2.单个参数是否合规\累计次数

例如:语数英三科是否及格

自定义参数:int chinese(及格为1,不及格为2)

int english (及格为1,不及格为2)

int math (及格为1,不及格为2)

相关推荐
汀、人工智能4 小时前
[特殊字符] 第40课:二叉树最大深度
数据结构·算法·数据库架构·图论·bfs·二叉树最大深度
沉鱼.444 小时前
第十二届题目
java·前端·算法
大熊背4 小时前
ISP Pipeline中Lv实现方式探究之三--lv计算定点实现
数据结构·算法·自动曝光·lv·isppipeline
西岸行者5 小时前
BF信号是如何多路合一的
算法
大熊背6 小时前
ISP Pipeline中Lv实现方式探究之一
算法·自动白平衡·自动曝光
罗西的思考6 小时前
【OpenClaw】通过 Nanobot 源码学习架构---(5)Context
人工智能·算法·机器学习
Liudef067 小时前
后量子密码学(PQC)深度解析:算法原理、标准进展与软件开发行业的影响
算法·密码学·量子计算
OYpBNTQXi8 小时前
SEAL全同态加密CKKS方案入门详解
算法·机器学习·同态加密
蚂蚁数据AntData9 小时前
破解AI“机器味“困境:HeartBench评测实践详解
大数据·人工智能·算法·机器学习·语言模型·开源
ZC跨境爬虫9 小时前
Python异步IO详解:原理、应用场景与实战指南(高并发爬虫首选)
爬虫·python·算法·自动化