算法刷题应用知识补充--搜索与图

这里写目录标题

DFS



知识点1:本题在dfs的for循环搜索中,进行了剪枝,即写一个判断函数,把不符合题意的情况直接continue,进行下一个数据的搜索

知识点2:在剪枝时,判断边界:直接对x,y在有效范围进行了判断,这样可以不必设置边界为-1

知识点3:剪枝中,会用到已经放置的位置,所以本题需要地图,定义g数组

知识点4:dfs时,虽然每次dfs可以将整个地图覆盖了,但是仍然需要回溯g的值,本质原因是因为要用g的值(是1还是0)来进行剪枝,所以g的值相当重要,需要回溯(tip:无论是否需要,都将值进行回溯就可以了,他主要的作用过程是,深搜搜到底之后,向上返回层数时,每个位置都被回溯成回溯的值)如下图:

而不回溯则是:

回溯时不管他的值是多少,等待下一次dfs直接覆盖掉

显然,我们直接统一进行回溯即可

知识点5:因为起点不确定,所以还要对起点进行手动遍历设置到地图上,但是这样的话,就相当于已经完成了一层,传入层数时传入1,进行第二层的搜索即可

dfs出来之后,也要将起点恢复成0,因为g是全局数组,不恢复会影响下一次起点的程序

dfs可以用来解决全排列、n皇后等问题,也就是一些"有多组解",但是每一组都需要搜索才能解出来等问题

dfs的回溯问题:统一将bool数据以及原数据回溯即可

dfs剪枝:可以定义一个check函数,在for遍历下一层数据时,如果不符合题意,直接continue

dfs记忆化搜索:定义一个全局数组,在if(u == n)里,也就是在递归结束的语句中,判断是否在记忆数组出现过,如果出现过,那么无需再次进行后续计算

BFS



知识点1:q数组,他的大小就是数据的多少,上题数据最多N*N个,其次,他是整个bfs的队列,作用就是按照层级搜索顺序存储搜索过的数据,这里可以知道,二维情况下,存的是搜索过的坐标,那么直接定义为PI类型的数组即可(假如元素时,元素表示为{a,b})

知识点2:要注意到题目能搜索的方向,然后对应到dx和dy向量里

知识点3:若题目要求搜索不到就输出某某某,那么可以将d数组(也就是表示第几层被搜索到的数组)全部初始化为某某某,这样如果搜不到,那么他的值就不会变,这样的话,输出d的那个位置,就是那个值

知识点4:在进行向量探索时,要定义新的x1,y1,不能对原数据x y修改,因为他们还要用于下一次的向量搜索

知识点5:每次拿到一个新的x1,y1,要对其合法性进行判断,且要判断是否d为-1,也就是没有被搜索过,不然可能会搜索到之前被搜过的

知识点6:bfs的while中,主要是构造出d数组,最后也是要取出d数组的值,但是附带每个循环步要对q数组进行相应的设置

bfs用来求一些"最短性质"的问题

一级目录

二级目录

二级目录

二级目录

一级目录

二级目录

二级目录

二级目录

一级目录

二级目录

二级目录

二级目录

相关推荐
fufu03114 分钟前
Linux环境下的C语言编程(三十七)
算法
风筝在晴天搁浅13 分钟前
代码随想录 300.最长递增子序列
算法·动态规划
小O的算法实验室14 分钟前
2026年EAAI SCI1区TOP,基于进化算法的多目标施工现场布局与安全规划模型,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
.小小陈.15 分钟前
C++初阶5:string类使用攻略
开发语言·c++·学习·算法
代码游侠20 分钟前
数据结构——树
数据结构·算法
天骄t21 分钟前
树与哈希:数据结构核心解析
数据结构·算法
小年糕是糕手25 分钟前
【C++】类和对象(六) -- 友元、内部类、匿名对象、对象拷贝时的编译器优化
开发语言·c++·算法·pdf·github·排序算法
ShineLeong25 分钟前
C的第一次
数据结构·算法
是宇写的啊1 小时前
算法-前缀和
算法
Brduino脑机接口技术答疑1 小时前
脑机接口数据处理连载(六) 脑机接口频域特征提取实战:傅里叶变换与功率谱分析
人工智能·python·算法·机器学习·数据分析·脑机接口