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

这里写目录标题

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用来求一些"最短性质"的问题

一级目录

二级目录

二级目录

二级目录

一级目录

二级目录

二级目录

二级目录

一级目录

二级目录

二级目录

二级目录

相关推荐
NEXT069 分钟前
前端算法:从 O(n²) 到 O(n),列表转树的极致优化
前端·数据结构·算法
代码游侠42 分钟前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
想进个大厂1 小时前
代码随想录day37动态规划part05
算法
sali-tec1 小时前
C# 基于OpenCv的视觉工作流-章22-Harris角点
图像处理·人工智能·opencv·算法·计算机视觉
子春一1 小时前
Flutter for OpenHarmony:构建一个 Flutter 四色猜谜游戏,深入解析密码逻辑、反馈算法与经典益智游戏重构
算法·flutter·游戏
人道领域1 小时前
AI抢人大战:谁在收割你的红包
大数据·人工智能·算法
TracyCoder1232 小时前
LeetCode Hot100(34/100)——98. 验证二叉搜索树
算法·leetcode
A尘埃2 小时前
电信运营商用户分群与精准运营(K-Means聚类)
算法·kmeans·聚类
power 雀儿3 小时前
掩码(Mask)机制 结合 多头自注意力函数
算法
会叫的恐龙3 小时前
C++ 核心知识点汇总(第六日)(字符串)
c++·算法·字符串