
DFS
AAS48
一起学算法
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Leet code 面试题 04.12. 求和路径(深搜)
给定一棵二叉树,其中每个节点都含有一个整数数值(该值或正或负)。设计一个算法,打印节点数值总和等于某个给定值的所有路径的数量。注意,路径不一定非得从二叉树的根节点或叶节点开始或结束,但是其方向必须向下(只能从父节点指向子节点方向)。对于一个根结点为root的树,其满足要求的路径数量 = 包含root节点的路径数 + 左子树满足要求的路径 + 右子树满足要求的路径。解释:和为 22 的路径有:[5,4,11,2], [5,8,4,5], [4,11,7]一个递归里面套着另一个递归。原创 2023-08-11 17:10:29 · 220 阅读 · 0 评论 -
Leetcode 784. 字母大小写全排列(回溯)
给定一个字符串 s ,通过将字符串 s 中的每个字母转变大小写,我们可以获得一个新的字符串。返回 所有可能得到的字符串集合。以 任意顺序 返回输出。数据量不大,可以直接暴力回溯。原创 2022-10-30 11:36:19 · 164 阅读 · 1 评论 -
1740. 找到二叉树中的距离(DFS)
给定一棵二叉树的根节点 root 以及两个整数 p 和 q ,返回该二叉树中值为 p 的结点与值为 q 的结点间的 距离。也可以借助前面实现的求最近公共祖先的方法。如果能求出祖先,再直接去求两边的距离也可以。两个结点间的 距离 就是从一个结点到另一个结点的路径上边的数目。1、遍历每一个节点,看其能否到达p,q两个目标节点。如果都可以到达的情况下,保存一个距离的最小值。原创 2022-09-23 09:52:51 · 331 阅读 · 0 评论 -
剑指 Offer II 085. 生成匹配的括号 (暴力回溯)
正整数 n 代表生成括号的对数,请设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。每个位置只有两种选择,放左括号或右括号。最后筛选掉不合格的括号组合。原创 2022-09-14 16:25:11 · 170 阅读 · 0 评论 -
Leetcode 802. 找到最终的安全状态(DFS + 记忆化搜索)
图由一个 索引从 0 开始 的 2D 整数数组 graph表示, graph[i]是与节点 i 相邻的节点的整数数组,这意味着从节点 i 到 graph[i]中的每个节点都有一条边。如果一个节点没有连出的有向边,则它是 终端节点。如果从该节点开始的所有可能路径都通向 终端节点 ,则该节点为 安全节点。判断一个节点是否是安全节点:1、如果其出度是终端节点,没问题。输入:graph = [[1,2],[2,3],[5],[0],[5],[],[]]节点 5 和节点 6 是终端节点,因为它们都没有出边。原创 2022-09-06 12:41:30 · 244 阅读 · 0 评论 -
Leetcode 526. 优美的排列 (回溯)
假设有从 1 到 n 的 n 个整数。因此我们没有必要每次在最后时刻再判断,如果一开始就不是优美排列,就没有必要搜索下去了。给你一个整数 n ,返回可以构造的 优美排列 的 数量。因为要想整个数组都是优美排列,必须保证,其子数组也是。事实证明,这个剪枝策略带来的优化效果是巨大的!注:如果每次都是搜到最后才判断,则会超时!与全排列思路基本一致,最后加个判断即可。perm[i] 能够被 i 整除。i 能够被 perm[i] 整除。所以我们用一个剪枝的手法。原创 2022-09-02 15:52:13 · 748 阅读 · 0 评论 -
797. 所有可能的路径(深搜回溯)
graph[i] 是一个从节点 i 可以访问的所有节点的列表(即从节点 i 到节点 graph[i][j]存在一条有向边)。输出:[[0,4],[0,3,4],[0,1,3,4],[0,1,2,3,4],[0,1,4]]输入:graph = [[4,3,1],[3,2,4],[3],[4],[]]解释:有两条路径 0 -> 1 -> 3 和 0 -> 2 -> 3。输入:graph = [[1,2],[3],[3],[]]输出:[[0,1,3],[0,2,3]]...原创 2022-09-01 13:41:14 · 158 阅读 · 0 评论 -
LCP 51. 烹饪料理(回溯)
勇者背包内共有编号为 0 ~ 4 的五种食材,其中 materials[j] 表示第 j 种食材的数量。通过这些食材可以制作若干料理,cookbooks[i][j] 表示制作第 i 种料理需要第 j 种食材的数量,而 attribute[i] = [x,y] 表示第 i 道料理的美味度 x 和饱腹感 y。每次递归去搜,因为每道菜只能做一次,所以要用一个vis数组,记录某道菜是否被做过。欢迎各位勇者来到力扣城,城内设有烹饪锅供勇者制作料理,为自己恢复状态。此题思路没什么难的,和全排列基本一样。...原创 2022-08-31 13:52:16 · 186 阅读 · 0 评论 -
Leetcode 剑指 Offer II 110. 所有路径(DFS)
graph 的第 i 个数组中的单元都表示有向图中 i 号节点所能到达的下一些结点(译者注:有向图是有方向的,即规定了 a→b 你就不能从 b→a ),若为空,就是没有下一个节点了。给定一个有 n 个节点的有向无环图,用二维数组 graph 表示,请找到所有从 0 到 n-1 的路径并输出(不要求按顺序)。每次深搜它相邻的节点。...原创 2022-08-29 00:15:44 · 289 阅读 · 0 评论 -
Leetcode 105. 岛屿的最大面积(DFS)
输入: grid = [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,1,0,0,1,1,0,0,1,0,1,0,0],[0,1,0,0,1,1,0,0,1,1,1,0,0],[0,0,0,0,0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,0,0,0,0,0,0,1,1,0,0,0,0]]找到给定的二维数组中最大的岛屿面积。..原创 2022-08-25 21:54:36 · 135 阅读 · 0 评论 -
Leetcode 79. 单词搜索(迷宫回溯)
输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “ABCCED”输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “ABCB”输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “SEE”原创 2022-08-24 16:33:59 · 203 阅读 · 0 评论 -
Leetcode 93. 复原 IP 地址(回溯)
给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 ‘.’ 来形成。例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效 IP 地址。我们需要注意的几个点就是:所切下来的第一个字符串,它必须满足IP字符串的条件,即值在0—255之间。如果它是IP字符串,那么我们才搜后面的。原创 2022-08-24 15:55:53 · 668 阅读 · 0 评论 -
Leetcode 17. 电话号码的字母组合(典型回溯)
输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。这是一个很典型的回溯题,和全排列非常类似。输入:digits = “23”输出:[“a”,“b”,“c”]输入:digits = “2”输入:digits = “”原创 2022-08-24 14:40:31 · 1363 阅读 · 0 评论 -
Leetcode 131. 分割回文串(回溯)
比如拿第一次切割举例。每次先判断切割左边的字符串是否是回文的,如果是,那么接着用递归的思路枚举右边。如果左边已经不是回文串了,那么就没有必要再搜右边(比如第三种情况,左边已经aab了,就直接不用搜了)给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串。输出:[[“a”,“a”,“b”],[“aa”,“b”]]枚举所有可能的切割方法。本题回溯的写法其实和全排列之类的也很像。第三种切割:aab b。输入:s = “aab”输入:s = “a”输出:[[“a”]]第四种切割:aabb。原创 2022-08-23 23:16:52 · 195 阅读 · 0 评论 -
DFS走迷宫
试题 算法提高 最长滑雪道 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 小袁非常喜欢滑雪, 因为滑雪很刺激。为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。 小袁想知道在某个区域中最长的一个滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。如下: 一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的滑坡为24-17-16-1。当然25-24-23-…-3-2-1更长。事实上,这是最长原创 2020-10-14 20:51:30 · 355 阅读 · 0 评论 -
全排列搜索---数字游戏
试题 算法训练 数字游戏 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个1~N的排列a[i],每次将相邻两个数相加,得到新序列,再对新序列重复这样的操作,显然每次得到的序列都比上一次的序列长度少1,最终只剩一个数字。 例如: 3 1 2 4 4 3 6 7 9 16 现在如果知道N和最后得到的数字sum,请求出最初序列a[i],为1~N的一个排列。若有多种答案,则输出字典序最小的那一个。数据保证有解。 输入格式 第1行为两个正整数n,sum 输原创 2020-10-14 19:35:55 · 288 阅读 · 0 评论 -
C语言实现邻接表
试题 与1连通的点的个数 输入格式 输入的第一行包含两个整数n, m n代表图中的点的个数,m代表边的个数 接下来m行,每行2个正整数,表示图中连通的两点。 输出格式 输出1个数,与1连通的点的个数。 样例输入 6 3 1 2 2 3 3 4 样例输出 4 【思路】:由于数据量大,不适合用邻接矩阵存储,用邻接表实现为宜 /** 6 4 1 3 3 4 3 5 5 6 **/ #include<stdio.h> #include<stdlib.h> #define原创 2020-10-09 20:53:21 · 752 阅读 · 0 评论 -
天梯赛习题:整数分解为若干项之和(DFS)
7-7 整数分解为若干项之和 (20 分) 将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=6+1,7=5+2,7=5+1+1,…。编程求出正整数N的所有整数分解式子。 输入格式: 每个输入包含一个测试用例,即正整数N (0<N≤30)。 输出格式: 每输出四个换个行 输入样例: 7 输出样例: 7=1+1+1+1+1+1+1;7=1+1+1+1+1+2;7=1+1+1+1+...原创 2019-03-20 13:09:44 · 571 阅读 · 0 评论 -
蓝桥杯:历届试题 发现环(并查集 + DFS)
问题描述 小明的实验室有N台电脑,编号1~N。原本这N台电脑之间有N-1条数据链接相连,恰好构成一个树形网络。在树形网络上,任意两台电脑之间有唯一的路径相连。 不过在最近一次维护网络时,管理员误操作使得某两台电脑之间增加了一条数据链接,于是网络中出现了环路。环路上的电脑由于两两之间不再是只有一条路径,使得这些电脑上的数据传输出现了BUG。 为了恢复正常传输。小明需要找到所有在环路上的电脑...原创 2019-03-12 13:24:40 · 1477 阅读 · 0 评论 -
LeetCode: 1022. 从根到叶的二进制数之和(DFS)
给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13 。 对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。 以 10^9 + 7 为模,返回这些数字之和。 示例: 1 / \...原创 2019-07-13 19:51:07 · 222 阅读 · 0 评论 -
HDU 2266 How Many Equations Can You Find(DFS)
Problem Description Now give you an string which only contains 0, 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9.You are asked to add the sign ‘+’ or ’-’ between the characters. Just like give you a string “12345”, you ca...原创 2019-02-06 16:52:47 · 153 阅读 · 0 评论 -
天梯赛习题:倒数第N个字符串(DFS + 漂亮的剪枝!)
L1-050 倒数第N个字符串 (15 分) 给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增。例如当 L 为 3 时,序列为 { aaa, aab, aac, …, aaz, aba, abb, …, abz, …, zzz }。这个序列的倒数第27个字符串就是 zyz。对于任意给定的 L,本题要求你给出对应序列倒...原创 2019-03-15 19:04:56 · 397 阅读 · 1 评论 -
回溯练习题:求解最小机器重量设计问题I(DFS回溯)
【问题描述】 某一机器由n个部件组成,编号1–n, 每一种部件都可以由m个供货商提供,供货商编号1–m。设wij表示供应商j处购得的部件i的重量,cij是相应的价格。对于给定的机器部件重量和机器部件价格,计算总价格不超过cost的最小重量机器设计,可以在同一个供应商处购得多个部件。 【输入描述】 n, m, cost 接下来n行表示wij 最后n行表示cij 【输入】 3 3 7 1 2 3 3 ...原创 2019-03-04 17:34:02 · 3790 阅读 · 0 评论 -
求解填数字游戏问题(DFS回溯)
【问题描述】 在3*3方阵中填入1到10内某9个整数,每方格填一个,使所有相邻两个方格两个整数之和为质数,输出满足要求的情况总数 【思路】 构建一个二维数组,常规回溯搜法来搜就可以了,值得注意的就是,对角相邻不符合本题中相邻的定义!这种题很有蓝桥杯的填空题风格 代码: #include&lt;iostream&gt; using namespace std; int maze[4][4]; ...原创 2019-03-04 16:32:45 · 3380 阅读 · 1 评论 -
HDU 2616 Kill the monster(DFS,类似全排列)
Problem Description There is a mountain near yifenfei’s hometown. On the mountain lived a big monster. As a hero in hometown, yifenfei wants to kill it. Now we know yifenfei have n spells, and the mon...原创 2019-02-17 17:22:22 · 199 阅读 · 0 评论 -
HDU 2181 哈密顿绕行世界问题(DFS)
Problem Description 一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市。 Input 前20行的第i行有3个数,表示与第i个城市相邻的3个城市.第20行以后每行有1个数m,m<=20,m>=1.m=0退出. Output 输出从第m个城市出发经过每个城市1次又回到m的所有路线,如有多条路线,按字典序...原创 2019-02-08 17:07:16 · 226 阅读 · 0 评论 -
HDU 2660 Accepted Necklace(DFS)
Problem Description I have N precious stones, and plan to use K of them to make a necklace for my mother, but she won’t accept a necklace which is too heavy. Given the value and the weight of each pre...原创 2019-02-07 17:21:31 · 159 阅读 · 0 评论 -
HDU 1342--Lotto(简单DFS)
Problem Description In a Lotto I have ever played, one has to select 6 numbers from the set {1,2,…,49}. A popular strategy to play Lotto - although it doesn’t increase your chance of winning - is to s...原创 2019-02-06 21:46:44 · 215 阅读 · 0 评论 -
HDU 1539 Shredding Company(DFS + 路径存储) + 全排列的回顾
Sample Input 50 12346 376 144139 927438 927438 18 3312 9 3142 25 1299 111 33333 103 862150 6 1104 0 0 Sample Output 43 1 2 34 6 283 144 139 927438 927438 18 3 3 12 error 21 1 2 9 9 rejected 103 86 2 1...原创 2019-02-03 17:03:39 · 360 阅读 · 0 评论 -
HDU 1518 Square(DFS)
这题跟前几天做的搜索题相比,难一些,首先思路就不是那么好想 要判断一组stick(木棒)能否组成正方形,首先要明确一点,如果可以围成正方形,那么木棒的长度总和一定是4的倍数。这个道理很好理解,也可以作为一个剪枝条件。 自己按照dfs的写法也写了一个,给的测试数据都能过,但提交5000MS严重超时 #include&amp;lt;iostream&amp;gt; #include&amp;lt;algorithm&amp;gt; ...原创 2019-01-27 22:35:54 · 287 阅读 · 0 评论 -
HDU 1045 Fire Net(DFS)
这道题属于较为简单的dfs题 题意很清楚,剪枝条件就是这个点的左边和上边不能在‘X’之前出现一个机关枪,这些约束条件全部写到剪枝函数中去 dfs函数中跟平常基本框架类似,因为假设某一个点可以放机关枪,那么它可以选择放或不放,两种情况都有可能取最大值。但如果一个点不能放机关枪,那么它这个点就只能选择不放,然后再搜下一个状态dfs(k + 1) AC代码如下: /* 4 .X.. .... XX.. ...原创 2019-01-31 16:21:57 · 161 阅读 · 0 评论 -
LeetCode 257. 二叉树的所有路径(DFS)
给定一个二叉树,返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 输入: 1 / 2 3 5 输出: [“1->2->5”, “1->3”] 解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3 原题链接:原题戳我 记得上学期做着一道题还有点困难,现在看,其实就是一个很简单的深搜问题,因为是二叉树,...原创 2019-02-27 14:48:16 · 265 阅读 · 0 评论 -
LeetCode 690. 员工的重要性(DFS)
【问题描述】 给定一个保存员工信息的数据结构,它包含了员工唯一的id,重要度 和 直系下属的id。 比如,员工1是员工2的领导,员工2是员工3的领导。他们相应的重要度为15, 10, 5。那么员工1的数据结构是[1, 15, [2]],员工2的数据结构是[2, 10, [3]],员工3的数据结构是[3, 5, []]。注意虽然员工3也是员工1的一个下属,但是由于并不是直系下属,因此没有体现在员工1...原创 2019-02-27 15:48:19 · 256 阅读 · 0 评论 -
全排列--带去重(DFS,深入理解递归思想)
【问题描述】 给定n个数(可重复) 要求输出没有重复的全排列结果 【输入】 3 1 2 2 【输出】 1 2 2 2 1 2 2 2 1 【思路】 突然在网上看到一个全排列带去重的题,居然把我问懵到了,不知道如何去重。。。后来查了点资料后豁然开朗,维护一个last变量,将上一次尝试过的值记录下来,如果下次尝试与last的值一样,那么就没有必要尝试! 这里要很好的理解递归的话,其实这个问题就很简单了...原创 2019-03-04 16:02:03 · 1639 阅读 · 0 评论 -
天梯赛习题:L3-008 喊山(DFS + 图论数据结构)
L3-008 喊山 (30 分) 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤。呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的。原来它是彝族先民用来求援呼救的“讯号”,慢慢地人们在生活实践中发现了它的实用价值,便把它作为一种交流工具世代传袭使用。 一个山头呼喊的声音可以被临近的山头同时听到。题目假设每个山头最多...原创 2019-03-09 14:21:20 · 719 阅读 · 3 评论 -
天梯赛习题:直捣黄龙(Dijsk算法 + dfs + 路径状态存储)
L3-011 直捣黄龙 (30 分) 本题是一部战争大片 —— 你需要从己方大本营出发,一路攻城略地杀到敌方大本营。首先时间就是生命,所以你必须选择合适的路径,以最快的速度占领敌方大本营。当这样的路径不唯一时,要求选择可以沿途解放最多城镇的路径。若这样的路径也不唯一,则选择可以有效杀伤最多敌军的路径。 输入格式: 输入第一行给出 2 个正整数 N(2 ≤ N ≤ 200,城镇总数)和 K(城镇间道...原创 2019-03-09 12:33:49 · 2151 阅读 · 0 评论 -
天梯赛习题:紧急救援(DFS + 最短路 + 图数据结构)
L2-001 紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队。 输入格式: 输入第一行给出4个正整数N、M、S、D,其中N(2≤N≤...原创 2019-03-08 18:58:14 · 806 阅读 · 0 评论 -
PAT回溯:连续因子(回溯 + dp)
L1-006 连续因子 (20 分) 一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。 输入格式: 输入在一行中给出一个正整数 N(1&lt;N&lt;2 31 )。 输出格式: 首先在第 1 行输出最长连续因子的个数;然后在...原创 2019-03-05 10:41:01 · 354 阅读 · 0 评论 -
蛮力法练习:两个暴力涂色的问题(一个dfs,一个纯暴力)
1.【题目描述】 给定无向图,要你判断有多少种着色方案。(相邻的节点不能着同一种颜色) 【输入】 第一个整数n代表无向图的节点个数 第二个整数k表示无向图的边数 第三个整数m表示可以涂的颜色种数 下面k行代表无向图的边 【输入样例】 5 8 4 1 2 1 3 1 4 2 3 2 4 2 5 3 4 4 5 【输出】 48 代表48种涂色方案 【思路】 直接采用dfs深搜 本题无向图的邻接矩阵为:...原创 2019-02-28 18:55:29 · 893 阅读 · 0 评论 -
HDU 2553 N皇后问题(经典DFS)
Problem Description 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。 你的任务是,对于给定的N,求出有多少种合法的放置方法。 Input 共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。 Output 共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数...原创 2019-02-18 23:13:55 · 294 阅读 · 0 评论