返回顶部

随笔分类 -  搜索 DFS/BFS

摘要:题意:给你一张图,"."表示能走,"#表示不能走,步行可以向四周四个方向移动一个单位,使用魔法可以移动到周围$5$X$5$的空地,问能否从起点都早终点,并求最少使用多少次魔法. 题解:明显是用BFS,但是我们要能步行就步行,尽量少使用魔法,所以我们可以用deque来存状态,将步行的状态放在前面,魔法 阅读全文
posted @ 2020-08-25 13:39 _Kolibri 阅读(434) 评论(0) 推荐(1)
摘要:题意:有$n$个人,每个人居住在某个节点,所有人都在节点$1$上班,下班后沿着最短路径回家,在回家途中心情可能会变差(心情只会变差不会变好),每个节点都有一个开心值,开心值等于所有经过时的好心情人数减去差心情人数,现在给你每个城市的开心值,问是否满足情况. 题解:这题真的好难想啊,假设第$i$个城市 阅读全文
posted @ 2020-08-20 20:40 _Kolibri 阅读(91) 评论(0) 推荐(0)
摘要:题意:有$[1,n]$这$n$个数,构造集合,集合中不能包含$u$和$v$,问最多能构造多少个集合. 题解:被这题卡了一整场.....以为是推公式,结果答案是暴搜? ​ 首先我们先用一个二维数组标记一下所有$u$和$v$,然后从$1$开始搜,如果$num>k$就表示一种情况搜完了,首先考虑不选,深搜 阅读全文
posted @ 2020-08-14 01:01 _Kolibri 阅读(148) 评论(0) 推荐(0)
摘要:题意:有一个$5$X$5$的$01$图,输出从左上角走到右下角的最短路径. 题解:基础的bfs,这里困难的是如何输出这个最短路径,我们可以用一个结构体来存点和路径,我们每次向外去拓展的时候,如果满足条件,那么就让这个点的路径继承上个点的路径,这样当我们走到右下角的时候,直接输出路劲然后return即 阅读全文
posted @ 2020-08-12 23:37 _Kolibri 阅读(131) 评论(0) 推荐(0)
摘要:题意:有一个三维的图,问能否从起点走到终点,若能,输出最小步数. 题解:应该是个bfs模板题,但是第一次写到三维图的题目,注意开三维数组存图,然后遍历方向的时候记得向z轴上下跑两个就行了. 代码: struct misaka{ int x,y,z; }e; int l,r,c; char s[100 阅读全文
posted @ 2020-08-12 23:28 _Kolibri 阅读(112) 评论(0) 推荐(0)
摘要:题意:有一个长度为$n=2^k$的字符串,对于某个字符$c$,我们定义他是一个$c-good$,如果: ​ 1.\(len=1\),并且$s[1]=c$. ​ 2.\(len>1\),\(s[1]=s[2]=...=s[\frac{len}{2}]=c\),并且另外一半是一个$(c+1)-good$ 阅读全文
posted @ 2020-07-18 01:36 _Kolibri 阅读(180) 评论(0) 推荐(0)
摘要:题意:给你$m$个长度为$n$的二进制数,求最少选多少个使它们$|$运算后所有位置均为$1$,如果不满足条件,则输出$-1$. 题解:这题$n$的范围很大,所以我们先用$string$读,然后再转化为$bitset$,之后再直接dfs爆搜,对于满足条件的维护一个最小值即可. 代码: #include 阅读全文
posted @ 2020-06-21 15:48 _Kolibri 阅读(189) 评论(0) 推荐(0)
摘要:题意:你刚开始位于坐标轴的$(0,0)$点,一共有$m$颗流星砸向地面,每颗流星在$t$时砸到$(x,y)$点,其四周上下左右也均有波及,你每秒可以向上下左右移动一个单位,问你是否可以移动到安全的地方(没有被流星波及的点),求最小步数. 题解:这题细节有点多,但也是一个基本的bfs,首先我们要用一个 阅读全文
posted @ 2020-06-16 10:48 _Kolibri 阅读(374) 评论(0) 推荐(0)
摘要:题意:有一$n$层高的大楼,每层楼都只能在合法情况下上$x$层或者下$x$层,问你是否能从$a$层楼坐电梯到$b$层楼,输出最小步数. 题解:直接dfs搜,$flo$表示层数,$cnt$表示步数,如果$flo=b$,维护最小值,然后对这层楼标记已走过,判断是否合法再向上向下搜,然后回溯取消标记. 代 阅读全文
posted @ 2020-06-16 09:53 _Kolibri 阅读(233) 评论(0) 推荐(0)
摘要:题意:有一个图,要求从$S$走到$E$,$.\(表示可以走的路径,\)*$周围的八个方向均不能走,要求判断是否能走到$E$,若能,输出最小路径长度,否则输出$Impossible$. 题解:我们先把$*$周围的点标记一下,然后判断$E$是否被标记过了,如果没有,则找到$S$的位置进行BFS,结构体$ 阅读全文
posted @ 2020-06-15 20:32 _Kolibri 阅读(272) 评论(0) 推荐(0)
摘要:题意:有一个$3$x$3$的的棋盘,有八个$1$~$8$的棋子,每次可以将一枚棋子移动到四周的空位,问最少移动多少次,使得最后的状态为$123804765$. 题解:直接BFS,用map来Hash存步数,这儿有个比较难想的点,就是把一维的坐标转化为二维的坐标(代码中有注释),然后我们找到$0$的位置 阅读全文
posted @ 2020-06-09 12:23 _Kolibri 阅读(146) 评论(0) 推荐(0)
摘要:题意:建一颗以$1$为根结点的树,询问$q$次,每次询问一个结点,问该结点的第$k$个子结点,如果不存在则输出$-1$. 题解:该题数据范围较大,需要采用dfs预处理的方法,我们从结点$1$开始向下找,$ans$数组记录的是,第$x$次查找时的结点,$path$表示某个结点所需的查找次数,$siz$ 阅读全文
posted @ 2020-06-04 18:53 _Kolibri 阅读(132) 评论(0) 推荐(0)
摘要:题意:给你$n$组数,每组4个正整数$a,b,c,d$,每组数有两个选择: ​ 1.增加$a$个财富,消耗$b$点魔法. ​ 2.回复$c$点魔法,减少$a$个财富. 求最后财富*魔法的最大值. 题解:我们从第$1$组数开始dfs,我们先考虑选择第一种情况,然后不断搜索,之后在搜索第二种情况,维护一 阅读全文
posted @ 2020-05-27 15:46 _Kolibri 阅读(273) 评论(0) 推荐(0)
摘要:题意:给你$n$个顶点和$m$条边,问它们有多少个单环(无杂环),例如图中第二个就是一个杂环. 题解:不难发现,如果某几个点能够构成单环,那么每个点一定只能连两条边.所以我们先构建邻接表,然后从某个数开始跑dfs,如果这一边所有点的度数都为$2$,那么就能构成一个单环. 代码: #include < 阅读全文
posted @ 2020-05-20 17:59 _Kolibri 阅读(161) 评论(0) 推荐(0)
摘要:题意:给你一个长度为$n$的序列$a$.对它重新排列,使得$a_{i+1}=a_/3$或$a_{i+1}=2*a_$.输出重新排列后的序列. 题解:经典DFS,遍历这个序列,对每个数dfs,每次dfs使$len+1$,当$len=n$时,说明这个序列已经满足条件了,输出并且标记一下,防止还有另外的情 阅读全文
posted @ 2020-05-20 17:37 _Kolibri 阅读(127) 评论(0) 推荐(0)
摘要:题意:有$n$个房间,在这些房间中两两连$m$次条边,问除了第一个房间,其他房间走到第一个房间的最短路径,输出这个房间所连的上一个房间,如果走不到,输出$no$. 题解:刚开始我写了一个dfs,结果竟然编译不了~~(段错误)~~,稍加分析了一下,发现样例1中成环了,然后又在纸上画了画,发现可以用bf 阅读全文
posted @ 2020-05-19 21:28 _Kolibri 阅读(254) 评论(0) 推荐(0)
摘要:题意:有一个$R*C$的矩阵,可以从矩阵中的任意一个数开始,每次都可以向上下左右选一个比当前位置小的数走,求走到$1$的最长路径长度. 题解:这题很明显看到就知道是dfs,但是直接爆搜会TLE,这里我们采用记忆化搜索,什么意思呢? ​ 我们在dfs的时候,每次都记录一下每个点到1的路径长度,然后,之 阅读全文
posted @ 2020-05-14 20:33 _Kolibri 阅读(173) 评论(0) 推荐(0)
摘要:题意:给你一个无限长且元素均为$0$的排列,每次给你一对$(x,y)$,表示在所有$x$的后面插入一个元素$y$,最后给你一个区间$(l,r)\(,输出\)[l,r-1]$中的所有元素. 题解:我们用一个vector和pair来存储每次输入的$(x,y)$,显然,在$x$后插入的最后一个数一定是$x 阅读全文
posted @ 2020-05-10 17:21 _Kolibri 阅读(138) 评论(0) 推荐(0)
摘要:传送门:C. Linova and Kingdom 题意:给你一棵树,要求对k个结点涂色,然后统计每个未涂色结点到根结点的路径上未涂色结点的和,求和最大能为多少 题解:对着样例画几遍,然后贪心发现,最优解一定是当前结点的深度减去它的子结点个数大的来涂色,然后直接就建树进行dfs就行了,其实这道题可以 阅读全文
posted @ 2020-04-19 16:09 _Kolibri 阅读(171) 评论(0) 推荐(0)
摘要:1.传送门:牛客13594-选择困难症 题意:给你k类物品,每类物品有a[i]个每个物品都有一个value,每类物品最多选一个,要求有多少种选法使得总value>m(没要求每类物品都必须选) 题解:很明显是一道dfs的题,但是要剪枝优化,假设我们当前所有物品的总vaule>m,那么我们只要算这件物品 阅读全文
posted @ 2020-04-10 00:55 _Kolibri 阅读(177) 评论(0) 推荐(0)