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

这里写目录标题

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

一级目录

二级目录

二级目录

二级目录

一级目录

二级目录

二级目录

二级目录

一级目录

二级目录

二级目录

二级目录

相关推荐
ZhengEnCi11 小时前
Agent 架构怎么选:从单 Agent 到多 Agent 编排的选型决策指南
算法·架构
秋天的怀念_David12 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Pniubi12 小时前
力扣283移动零(双指针法)
算法·leetcode·职场和发展
hhb_61812 小时前
大模型落地三重优化实战
人工智能·算法·机器学习
云和数据.ChenGuang12 小时前
光哥说Python RAG 系统需要哪些评估指标:从检索到生成的全链路评测指南
网络·人工智能·python·算法·langchain
2601_9707038314 小时前
工业除湿机租赁:把一份租金合同拆开看
大数据·数据结构·算法·数据库架构·推荐算法
心中有你021414 小时前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法
ZhengEnCi15 小时前
同样的模型,为什么本地和云 API 差别那么大:量化精度、聊天模板与采样参数的三大元凶
人工智能·算法·llm
Flynn Liang15 小时前
RAG 答非所问/幻觉怎么破?Spring AI QuestionAnswerAdvisor 召回优化实战(TopK/重排/混合检索)
人工智能·算法·spring·rag·幻觉·springai
liminla!15 小时前
SQL 从入门到进阶:语法速查与实战练习(完整优化版)
数据库·sql·算法