![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
搜索
搜索算法
思维在奔跑
这个作者很懒,什么都没留下…
展开
-
二叉树中的最大路径和
题目描述二叉树里面的路径被定义为:从该树的任意节点出发,经过父=>子或者子=>父的连接,达到任意节点的序列。注意:1.同一个节点在一条二叉树路径里中最多出现一次2.一条路径至少包含一个节点,且不一定经过根节点给定一个二叉树的根节点root,请你计算它的最大路径和例如:给出以下的二叉树,最优路径是:2=>1=>3,或者3=>1=>2,最大路径和=2+1+3=6数据范围:节点数满足 0 <= n <= 10^5,节点上的值满足∣val∣≤1000原创 2022-02-12 12:26:42 · 793 阅读 · 0 评论 -
搜索算法详解(DFS/BFS)
好多人喜欢把搜索算法和动态规划,图论并列来看,似乎搜索算法是一个很独立的算法。(我以前就是这么想的,以至于好长一段时间没有掌握搜索的核心。)实际上,搜索算法是隶属于图论算法的,他的作用是把整个图遍历一遍(就是把整个图不重不漏地扫一遍)当你做过许多搜索的题你就会发现,这些题都是一样的,都是把整个图遍历一遍就完,没有任何技巧可言。根据扫描的顺序不同,就有了深度优先搜索和广度优先搜索。如果是一个一维的数据结构,比如说数组,那么扫一遍很简单,用for循环从第一个数扫到最后一个数就ok了。但是图这种数据结构就比较原创 2020-08-23 16:26:25 · 966 阅读 · 0 评论 -
调手表(宽度优先搜索)
题目描述小明买了块高端大气上档次的电子手表,他正准备调时间呢。在 M78 星云,时间的计量单位和地球上不同,M78 星云的一个小时有 n 分钟。大家都知道,手表只有一个按钮可以把当前的数加一。在调分钟的时候,如果当前显示的数是 0 ,那么按一下按钮就会变成 1,再按一次变成 2 。如果当前的数是 n - 1,按一次后会变成 0 。作为强迫症患者,小明一定要把手表的时间调对。如果手表上的时间比当前时间多1,则要按 n - 1 次加一按钮才能调回正确时间。小明想,如果手表可以再添加一个按钮,表示把当前原创 2020-07-28 11:15:47 · 150 阅读 · 0 评论 -
[蓝桥杯2017决赛]磁砖样式(搜索)
题目描述小明家的一面装饰墙原来是 310 的小方格。现在手头有一批刚好能盖住2个小方格的长方形瓷砖。瓷砖只有两种颜色:黄色和橙色。小明想知道,对于这么简陋的原料,可以贴出多少种不同的花样来。小明有个小小的强迫症:忍受不了任何22的小格子是同一种颜色。(瓷砖不能切割,不能重叠,也不能只铺一部分。另外,只考虑组合图案,请忽略瓷砖的拼缝)显然,对于 23 个小格子来说,口算都可以知道:一共10种贴法。但对于 310 的格子呢?肯定是个不小的数目,请你利用计算机的威力算出该数字。输出输出一个整原创 2020-07-24 20:42:27 · 190 阅读 · 0 评论 -
[Acwing] 188. 武士风度的牛
农民John有很多牛,他想交易其中一头被Don称为The Knight的牛。这头牛有一个独一无二的超能力,在农场里像Knight一样地跳(就是我们熟悉的象棋中马的走法)。虽然这头神奇的牛不能跳到树上和石头上,但是它可以在牧场上随意跳,我们把牧场用一个x,y的坐标图来表示。这头神奇的牛像其它牛一样喜欢吃草,给你一张地图,上面标注了The Knight的开始位置,树、灌木、石头以及其它障碍的位置,除此之外还有一捆草。现在你的任务是,确定The Knight要想吃到草,至少需要跳多少次。The Knig原创 2020-05-13 15:30:02 · 128 阅读 · 1 评论 -
[Acwing] 1100. 抓住那头牛
农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点 N,牛位于点 K。农夫有两种移动方式:从 X 移动到 X−1 或 X+1,每次移动花费一分钟从 X 移动到 2∗X,每次移动花费一分钟假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?输入格式共一行,包含两个整数N和K。输出格式输出一个整数,表示抓到牛所花费的最少时间。数据范围0≤N,K≤105输入样例:5 17输出样例:4思路分析宽度优先队列最短路模型,就是更新d数组,记录各原创 2020-05-13 11:09:12 · 166 阅读 · 0 评论 -
[宽度优先搜索]Acwing 1076. 迷宫问题
给定一个 n×n 的二维数组,如下所示:int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。数据保证至少存在一条从左上角走到右下角的路径。输入格式第一行包含整数 n。接下来 n 行,每行包含 n 个整数 0 或 1,表示原创 2020-05-13 16:23:01 · 245 阅读 · 1 评论 -
[宽度优先搜索] Acwing 1098. 城堡问题
1 2 3 4 5 6 7 ############################# 1 # | # | # | | # #####---#####---#---#####---# 2 # # | # # # # # #---#####---#####---#####---# 3 # | | # # # # # #---#########---#####---#..原创 2020-05-12 10:26:13 · 219 阅读 · 0 评论 -
[宽度优先搜索] Acwing 1097 池塘计数
农夫约翰有一片 N∗M 的矩形土地。最近,由于降雨的原因,部分土地被水淹没了。现在用一个字符矩阵来表示他的土地。每个单元格内,如果包含雨水,则用”W”表示,如果不含雨水,则用”.”表示。现在,约翰想知道他的土地中形成了多少片池塘。每组相连的积水单元格集合可以看作是一片池塘。每个单元格视为与其上、下、左、右、左上、右上、左下、右下八个邻近单元格相连。请你输出共有多少片池塘,即矩阵中共有多少片相连的”W”块。输入格式第一行包含两个整数 N 和 M。接下来 N 行,每行包含 M 个字符,字符为原创 2020-05-11 10:42:51 · 238 阅读 · 0 评论 -
编程杂谈
有关递归与递推:写dfs的时候会用到递归,所谓递归与递推反映到最终计算机的指令上来看,都是一模一样的。只不过是写法不同而已,人的思维的不同决定了写法的不同。同样是求根的状态,可以自底向上推,就是递推,如果自顶向下推,就是递归。但是计算机执行的时候还是自底向上这种。先从叶子开始,然后逐渐回溯。...原创 2020-04-07 21:28:54 · 80 阅读 · 0 评论 -
HRBUST - 1955 数独 (DFS递归)
数独应该是一个大家都玩过的游戏,说的就是在一个99的方格中填入一些数字,符合以下规则:1.每一列或每一行中1-9只能出现一次。2.这个数独划分成的9个小的33的方格矩阵内,从1-9的每个数只能出现一次。Input输入数据的第一行包括一个整数T,表示有T组测试数据。每组数据由9行组成,每行由9个整数或者组成,其中表示空白的格子。Output每组数据输出9行,每行9个整数,表示整个数独。...原创 2019-12-07 22:35:08 · 132 阅读 · 0 评论 -
acwing-小猫爬山
题目描述翰翰和达达饲养了N只小猫,这天,小猫们要去爬山。经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<)。翰翰和达达只好花钱让它们坐索道下山。索道上的缆车最大承重量为W,而N只小猫的重量分别是C1、C2……CN。当然,每辆缆车上的小猫的重量之和不能超过W。每租用一辆缆车,翰翰和达达就要付1美元,所以他们想知道,最少需要付多少美元才能把这...原创 2019-10-23 20:10:39 · 368 阅读 · 1 评论 -
acwing 24 机器人的运动范围
暴力搜索机器人的运动范围dfs搜索,特别要注意m和n有可能为0,所以要特判m和n同时为0的情况,输出0。c++solution类的交题方式实在有点迷,还要抽个时间学一下c++的类,说不定以后能用得上。ac代码:class Solution {public: int k=0; int m=0,n=0; int cnt=0; int vis[55][55]...原创 2019-10-22 20:44:31 · 124 阅读 · 0 评论 -
poj-1321 棋盘问题
暴力搜索题目链接:poj-1321 棋盘问题题目大意:n*n的棋盘上要放k个棋子,棋盘可以放棋子的地方标记为“#”,不能放棋子的地方标记为“.”,问有几种放的方法。解题思路:dfs搜索,一个关键点是要能想到每行只能放一个棋子,每一列也只能放一个棋子。搜索思路是一行一行搜,写一个check函数检验某个地方能否放棋子(这个地方可以被放棋子,而且该列除了这一行不能放其他棋子)。给每个满足条件的地方...原创 2019-10-22 19:07:42 · 342 阅读 · 0 评论