![](https://img-blog.csdnimg.cn/20190927151132530.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
搜索算法
文章平均质量分 63
涵盖众多搜索算法,如DFS、IDA Star、BFS、A Star算法等
hnjzsyjyj
这个作者很懒,什么都没留下…
展开
-
AcWing 1542:老鼠和大米 ← bfs+队列
● BFS算法助记:建-入-量:头-出:https://blog.csdn.net/hnjzsyjyj/article/details/125801217● DFS算法模板:https://blog.csdn.net/hnjzsyjyj/article/details/118736059原创 2024-07-13 23:12:48 · 409 阅读 · 0 评论 -
AcWing 3587:连通图 ← dfs(邻接矩阵 or 链式前向星)
● 本题利用 dfs 判断连通图的原理在于“dfs必然能够遍历到连通图的所有点”。如果有点没有被遍历到,说明不连通。原创 2024-07-11 23:02:21 · 332 阅读 · 0 评论 -
AcWing 1256:扩展二叉树
扩展二叉树的前序遍历相当于普通二叉树的“前序+中序”,能唯一确定二叉树的形状;扩展二叉树的后序遍历相当于普通二叉树的“后续+中序”,能唯一确定二叉树的形状。原创 2024-07-02 22:27:27 · 397 阅读 · 0 评论 -
AcWing 1476:数叶子结点 ← dfs
● 如何判断一个点是否为叶子结点?若一个点的儿子数为 0,则该点为叶子结点。● 如何计算某一层有几个叶子结点?应该从该层的上一层入手,将上一层的所有点进行 DFS 扩展即可得到该层的所有点。原创 2024-07-01 11:21:45 · 279 阅读 · 0 评论 -
AcWing 217:绿豆蛙的归宿 ← 搜索算法
● 本题用到概率论中数学期望的线性性质原创 2024-05-24 00:01:43 · 378 阅读 · 0 评论 -
洛谷 P1002:过河卒 ← 动态规划
● 这是一道典型的动态规划算法题目。设 f(i,j) 表示从 (0,0) 走到 (i,j) 的路径的条数。如果 i=0 且 j=0,则 f[i][j]=1;否则,如果i=0,则 f[i][j]=f[i][j−1];否则,如果 j=0,则 f[i][j]=f[i−1][j];否则,f[i][j]=f[i−1][j]+f[i][j−1]。原创 2024-05-13 22:35:32 · 454 阅读 · 0 评论 -
AcWing 852:spfa判断负环 ← 链式前向星存图
● SPFA 算法是判断负环的常用算法,其实现如下: 在更新 dis[i] 时,我们顺带维护一个 cnt[i] 数组,该数组用来存放最短路的边数。如果 cnt[i]≥n 时,说明图中有 n+1 个点,而题目一共给了 n 个点,说明一定存在环。而 SPFA 算法更新的要求是距离变短,因此这个环一定是负环。 但是从原点开始可能走不到负环,我们需要初始时把所有的点都放入队列中。原创 2024-05-06 08:05:57 · 382 阅读 · 0 评论 -
AcWing 851:spfa求最短路 ← 链式前向星存图
● 百度百科:SPFA 算法是 Bellman-Ford 算法的队列优化算法的别称,通常用于求含负权边的单源最短路径,以及判负权环。SPFA 最坏情况下时间复杂度和朴素 Bellman-Ford 相同,为 O(VE)。●Bellman ford 算法可以存在负权回路,是因为其循环的次数是有限制的,因此最终不会发生死循环。但是, SPFA 算法不可以。这是因为,SPFA 算法用队列来存储,只要发生了更新就会不断的入队。因此,假如有负权回路请不要用 SPFA ,否则会死循环。原创 2024-05-05 17:45:42 · 365 阅读 · 0 评论 -
笛卡尔树 ← AcWing 4279
●笛卡尔树(1)笛卡尔树是由一系列不同数字构成的二叉树。(2)笛卡尔树的结点有两个属性:键值 val、优先级 pri。其中,键值 val 预设,优先级 pri 随机或预设。笛卡尔树各个结点的键值 val 满足堆的性质,各个结点的优先级 pri满足二叉搜索树(BST)的性质。(3)笛卡尔树可由数列构造,在区间最值查询、区间 topK 查询等问题上有广泛应用。(4)笛卡尔树结点键值 val的中序遍历序列为构建其的原始序列。最小堆笛卡尔树表示满足小根堆性质的笛卡尔树。原创 2024-04-29 21:26:09 · 271 阅读 · 0 评论 -
牛客网:S老师的签到 ← BFS
● BFS 有“分层”的核心思想,故在本题中以 x+y 相同的值作为“分层”的依据。即若从某位置开始,则位于同一层的是 x+y 的值相同的位置。其中,x 是向下走的距离,y 是向右走的距离。● C++11 标准中的 for 循环,用 auto 以简洁、统一的方式来遍历容器和数组。● 运算符 ^ 表示按位异或。原创 2024-04-28 07:31:11 · 900 阅读 · 0 评论 -
蓝桥杯:跳跃 ← 深搜(dfs)或动态规划(dp)
● 据题意,每次只能往右或往下走,且一步走的直线距离不超过 3,故有 9 种走法。这 9 中走法分别为:(0,1)、(0,2)、(0,3)、(1,0)、(1,1)、(1,2)、(2,0)、(2,1)、(3,0)。在代码中,可设 x 坐标增量 dx 及 y 坐标增量 dy 分别为:dx[]={0,0,0,1,1,1,2,2,3}及 dy[]={1,2,3,0,1,2,0,1,0}原创 2024-04-07 12:12:50 · 898 阅读 · 1 评论 -
蓝桥杯:七步诗 ← bfs
BFS算法助记:建-入-量:头-出-入,详见:https://blog.csdn.net/hnjzsyjyj/article/details/125801217原创 2024-04-04 18:08:16 · 641 阅读 · 0 评论 -
AcWing 1111:字母 ← dfs & bfs
要注意的是,这里的 st 数组不是标记走过的格子,而是标记字母是否被访问过。原创 2024-04-02 07:04:32 · 406 阅读 · 0 评论 -
HDU 1100:Trees Made to Order ← 卡特兰数
本题大意:给定一个二叉树的排序规则,之后输入一个序号,然后按格式约定输出这个序号所对应的二叉树。本题给出的二叉树的排序规则如下:(1)结点个数多的二叉树,序号更“大”;(2)结点个数一样的二叉树,左子树高度高的二叉树,序号更“大”;(3)结点个数一样的二叉树,左子树相同,右子数高度高的二叉树,序号更“大”。原创 2024-03-29 13:51:19 · 922 阅读 · 0 评论 -
AcWing 178:第K短路 ← A* 算法
A* 算法的估值更新,需要用到 A* 算法的启发函数 h(x)。相应地,A* 算法的可表示为:f(x)=g(x)+h(x),其中:f(x):从初始状态经由当前状态 x 到目标状态的估计代价g(x):从初始状态到当前状态 x 的实际代价h(x):从当前状态 x 到目标状态的估计代价。原创 2023-12-11 07:43:31 · 591 阅读 · 0 评论 -
A* 算法简介
A* 算法的估值更新,需要用到 A* 算法的启发函数 h(x)。相应地,A* 算法的可表示为:f(x)=g(x)+h(x),其中:f(x):从初始状态经由当前状态 x 到目标状态的估计代价g(x):从初始状态到当前状态 x 的实际代价h(x):从当前状态 x 到目标状态的估计代价原创 2023-12-10 19:38:34 · 725 阅读 · 1 评论 -
AcWing 511:联合权值 ← DFS、链式前向星
h[a]:存储单链表表头结点 a 的编号e[idx]:存储结点 idx 的值ne[idx]:存储结点 idx 的下一个结点的编号原创 2023-12-02 10:55:35 · 475 阅读 · 0 评论 -
池塘计数 Flood_Fill
【Flood Fill算法】Flood Fill算法本质上是一种BFS算法。常用于从棋盘模型的某个点出发,然后扩展到与这个点相邻的上、下、左、右、左上、右上、左下、右下等八个点。【题目描述】农夫约翰有一片 N∗M 的矩形土地。最近,由于降雨的原因,部分土地被水淹没了。现在用一个字符矩阵来表示他的土地。每个单元格内,如果包含雨水,则用”W”表示,如果不含雨水,则用”.”表示。现在,约翰想知道他的土地中形成了多少片池塘。每组相连的积水单元格集合可以看作是一片池塘。每个单元格视为与其上、下、左、原创 2021-07-10 22:52:38 · 250 阅读 · 1 评论 -
山峰和山谷(poi2007) Flood_Fill
【题目描述】https://www.acwing.com/problem/content/description/1108/https://szkopul.edu.pl/problemset/problem/rd6H05Dm8ME79sO3U9_f_ga_/site/?key=statement 左上图:2个山峰,1个山谷 右上图:3个山峰,3个山谷【算法代码】#include <bits/stdc++.h>using n...原创 2021-07-11 23:57:59 · 202 阅读 · 0 评论 -
城堡问题 Flood_Fill
【问题描述】下图是一个城堡的地形图。城堡被分割成 m∗n个方格区域,每个方格区域可以有0~4面墙。注意:墙体厚度忽略不计。请你编写一个程序,计算城堡一共有多少房间,最大的房间有多大。【输入格式】第一行包含两个整数 m 和 n,分别表示城堡南北方向的长度和东西方向的长度。接下来 m 行,每行包含 n 个整数,每个整数都表示平面图对应位置的方块的墙的特征。每个方块中墙的特征由数字 P 来描述,我们用1表示西墙,2表示北墙,4表示东墙,8表示南墙,P 为该方块包含墙的数字之和。例如,如果一原创 2021-07-11 18:08:09 · 111 阅读 · 0 评论 -
AcWing 3555:二叉树(北京大学考研机试题)→公共父结点
对于一个二叉树,定义当前节点的编号为 i(从 1 开始),那么它的左子节点为 2*i,右子节点是2*i+1。故寻找两个节点的公共父节点,可以让其分别除以2,直到两个节点指向同一个位置。原创 2023-11-29 14:59:36 · 392 阅读 · 0 评论 -
AcWing 3555:二叉树(多次询问两个结点之间的最短路径长度) ← DFS
本题用 le,ri 数组存储每个结点的左右儿子,用 fa 数组表示子结点的父节点,用 dep 数组表示每个结点的深度并用 dfs 初始化每个结点的深度。原创 2023-11-29 11:32:42 · 159 阅读 · 0 评论 -
AcWing 184:虫食算 ← DFS
依次枚举每个字母代表哪个数字,最坏情况下需要枚举 n! 种方案,但由于剪枝的存在,实际搜索到的空间很小。原创 2023-11-29 10:46:13 · 34 阅读 · 0 评论 -
AcWing 1101:献给阿尔吉侬的花束 ← BFS
说明一下,地图初始化为全是墙,然后把地图存储在a[1][1] ~ a[n][m]后,地图四周会被墙包围,所以 bfs 的时候,不用做地图越界处理了。原创 2023-11-29 09:35:20 · 85 阅读 · 0 评论 -
AcWing 188:武士风度的牛 ← BFS
农民 John 有很多牛,他想交易其中一头被 Don 称为 The Knight 的牛。这头牛有一个独一无二的超能力,在农场里像 Knight 一样地跳(就是我们熟悉的象棋中马的走法)。虽然这头神奇的牛不能跳到树上和石头上,但是它可以在牧场上随意跳,我们把牧场用一个 x,y 的坐标图来表示。......原创 2023-11-26 10:04:59 · 164 阅读 · 0 评论 -
AcWing 3384:二叉树遍历(依先序序列建树,输出中序序列) ← DFS
本题是按输入的先序遍历序列建树,然后输出对应的中序遍历序列。原创 2023-11-24 11:26:54 · 124 阅读 · 0 评论 -
AcWing 4520:质数 ← DFS + 注意整数溢出
在本例中,若ans初始化为1e5,就不会导致整数溢出。声明 ans 为 int 型即可。这是因为在本例中,由1~100 分别扩展得到的各个最小质数中最大的是由 89 扩展得到的 8923,没有超过1e5。。。。。。。原创 2023-11-20 11:17:14 · 380 阅读 · 0 评论 -
AcWing 4520:质数 ← BFS
给定一个正整数 X,请你在 X 后面添加若干位数字(至少添加一位数字;添加的数不能有前导0),使得结果为质数,在这个前提下所得的结果应尽量小。原创 2023-11-18 22:24:55 · 330 阅读 · 0 评论 -
蓝桥杯模拟赛:最远滑行距离 ← dfs
小蓝准备在一个空旷的场地里面滑行,这个场地的高度不一,小蓝用一个 n 行 m 列的矩阵来表示场地,矩阵中的数值表示场地的高度。如果小蓝在某个位置,而他上、下、左、右中有一个位置的高度(严格)低于当前的高度,小蓝就可以滑过去,滑动距离为 1 。如果小蓝在某个位置,而他上、下、左、右中所有位置的高度都大于等于当前的高度,小蓝的滑行就结束了。小蓝不能滑出矩阵所表示的场地。小蓝可以任意选择一个位置开始滑行,请问小蓝最多能滑行多远距离。原创 2023-11-17 11:14:04 · 166 阅读 · 0 评论 -
洛谷P8815:逻辑表达式 ← CSP-J 2022 复赛第3题
分治法思想原创 2023-09-23 23:10:18 · 145 阅读 · 0 评论 -
罗勇军 →《算法竞赛·快冲300题》每日一题:“游泳” ← DFS+剪枝
由于本题规定小明可以往上下左右四个方向游,也就是说可以走回头路,所以不能用动态规划。故依据本题题意,若要找一条最舒适的路径的话,就需要用搜索算法了。但是,如果简单地遍历出所有路径,再比较得到温差最小路径,肯定超时,必须剪枝才能减少路径的搜索数量。如何剪枝?这是本题难点。因为,如果已知最小温差,只需一边游一边检查当前路径上的最大温差,如果已经超过了允许的最小温差,就不用走下去了。但是最小温差不能预知,只能猜,最好的方法是使用二分法来猜这个最小温差。本题的解法是“DFS+二分法”。原创 2023-09-02 19:49:19 · 1203 阅读 · 0 评论 -
罗勇军 →《算法竞赛·快冲300题》每日一题:“超级骑士” ← DFS
◆ 虽然题目问能不能到达所有的点,但其实不用真的检查是否能到所有的点。只需检查从某个任意点 (sx, sy) 出发,存在 (sx, sy) 的上、下、左、右的点都可到达,可立即返回“Yes”,不用再遍历其他的点,这就是剪枝的应用。这是因为,若给定的走法能够保证存在某个任意点 (sx, sy) 的上、下、左、右的点都可到达,那么平面上的任意点都可达。或从直观上分析,能否走到平面上的所有点,取决于骑士走法的粒度(或称步幅),粒度越小越有可能达到所有点。原创 2023-08-22 09:11:35 · 922 阅读 · 1 评论 -
罗勇军 → 算法竞赛·快冲300题》每日一题:“冰雹猜想II”
本题显然用倒推,有2种情况:(1)“除以2”的倒推,是“乘2”;(2)“乘3加1”的倒推,是“减1除以3”,需要注意,此时应该判断“减1除以3”能除尽,而且是奇数。原创 2023-08-21 00:06:03 · 317 阅读 · 0 评论 -
AcWing 4957:飞机降落
由数据范围反推算法复杂度以及算法内容,参见:https://www.acwing.com/blog/content/32/原创 2023-08-08 23:13:09 · 99 阅读 · 0 评论 -
AcWing 129:火车进栈 ← DFS
注意:某些出栈序列不能实现。例如,当n=3时,没有312这个出栈序列。原创 2023-08-08 16:19:19 · 106 阅读 · 0 评论 -
AcWing 93:递归实现组合型枚举 ← DFS
从 1∼n 这 n 个整数中随机选出 m 个,输出所有可能的选择方案。原创 2023-08-08 00:06:50 · 120 阅读 · 0 评论 -
九度OJ → 题目1368:二叉树中和为某一值的路径 ← DFS
输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。且保证树中各结点的值均不小于 0。注意:从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。原创 2023-08-07 13:56:49 · 97 阅读 · 0 评论 -
AcWing 4310:树的DFS ← vector、auto、邻接表
-对于一棵树的DFS序列而言,每棵子树的DFS序列对应其中的连续一段。-树可视为没有环的“有向无权图”。故可借鉴利用STL中的vector实现“有向无权图”的邻接表表示存图的代码实现存树。原创 2023-08-05 11:54:42 · 353 阅读 · 0 评论 -
AcWing 24:机器人的运动范围 ← BFS、DFS
地上有一个 m 行和 n 列的方格,横纵坐标范围分别是 0∼m−1 和 0∼n−1。一个机器人从坐标 (0,0) 的格子开始移动,每一次只能向左,右,上,下四个方向移动一格。但是不能进入行坐标和列坐标的数位之和大于 k 的格子。请依次输入k,m,n,问该机器人能够达到多少个格子?注意:0原创 2023-08-04 10:31:45 · 1132 阅读 · 3 评论 -
蓝桥杯:长草 ← DFS
蓝桥杯之长草题目的DFS解法。原创 2023-04-21 09:22:54 · 284 阅读 · 0 评论