
DFS-深度优先搜索
DFS
yc_cy1999
一只喜欢cc和想去南大的小羊
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode 79. Word Search【回溯模板题】
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述知识点回溯+数组结果实现码前思考典型的回溯模板题,哈哈哈。那就回忆一下回溯的模板套路是什么:result = []def backtrack(路径, 选择列表): if 满足结束条件: result.add(路径) return for 选择 in 选择列表: 做选择 backtrack(路径, 选择列表) 撤销选择在.原创 2020-07-24 15:24:25 · 203 阅读 · 0 评论 -
⭐⭐⭐【DFS+理解题意】找出直系亲属
文章目录题目描述代码实现码后反思题目描述代码实现//我觉得使用DFS更简单易懂一些//采用邻接表记录#include <cstdio>#include <iostream>#include <string>#include <vector>using namespace std;const int maxn = 30;vector<int> adj[maxn];int n;int m;int res;void .原创 2020-06-26 17:11:19 · 339 阅读 · 0 评论 -
LeetCode 39. Combination Sum【DFS+剪枝】⭐⭐⭐⭐⭐
文章目录题目描述知识点运行结果码前思考代码实现码后反思参考题解题目描述给一个不含重复元素数组和一个数target,求在可重复抽取数组元素的情况下,所有和为target的情况,输出要从小到大排序。知识点回溯DFS+剪枝运行结果码前思考我一开始想要用动态规划中的完全背包+充满背包做的,但是很久没刷题了,想不起来该怎么做了。。。我是看了网上的题解才懂得。就是简单地暴力dfs,初始sum为0,然后暴力枚举每个数字,为了不含重复的情况,所以遍历后的数字就不能在后面考虑了。同时,可以进行一个.原创 2020-06-18 17:45:37 · 372 阅读 · 0 评论 -
PAT A1018 Public Bike Management【带其他标尺的Dijkstra+DFS】⭐⭐⭐⭐⭐
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述知识点带附加标尺的Dijkstra+DFS实现码前思考这道题目我又没有看懂题意,感觉题意并没有描述清楚啊~~题意的坑:back的自行车不能送回已经遍历过的点。比如2 10,就是send = 3, back = 5 而不是 send = 2, back = 2;题目中说了只能沿途,不能回退。解决了上面题意理解的问题,接下来我又犯了一个错误——我直接在每步DFS中求解need和remain,我忽视了路径是逆序的,所以应该要到.原创 2020-06-01 21:48:13 · 545 阅读 · 0 评论 -
PAT A1013 Battle Over Cities (25分)【图的DFS+连通分量】
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述知识点图的遍历实现码前思考图的dfs,求连通分量哒~记得每次都要初始化vis数组全体为false哈代码实现//图的DFS,计数连通分量//数组下标从1开始 #include <cstdio>#include <algorithm>using namespace std;const int maxn = 1e3+10;int n;int m;int k;int blocked;b.原创 2020-05-31 19:54:46 · 225 阅读 · 0 评论 -
LeetCode 114. Flatten Binary Tree to Linked List【树的DFS递归封装思想】⭐⭐⭐
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述知识点树的遍历、DFS结果实现码前思考我的思想就是采用先序遍历,不断将结点拼接到左子树,最后反转成右子树代码实现//首先先序遍历得到,然后再反转左右子树/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * .原创 2020-05-23 20:12:44 · 290 阅读 · 0 评论 -
98. Validate Binary Search Tree【中序遍历、验证二叉搜索树】⭐⭐⭐⭐⭐
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述知识点BST的中序遍历性质、DFS结果实现码前思考我之前想的是直接使用该节点的左右结点的值小于等于或者大于来做,结果忽视了还有该节点的根结点可能会小于该节点右结点的情况。我想这也是这道题通过率低的原因吧;利用BST中序遍历之后,是有序地性质,可以使用中序遍历作为载体,保存一个pre遍历用于比较是否有序,从而,实现验证BST;代码实现//树的深度优先搜索//注意提前终止,防止超时/** * Definition.原创 2020-05-23 20:05:43 · 183 阅读 · 0 评论 -
LeetCode 101. Symmetric Tree【树的遍历】⭐⭐⭐⭐⭐
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述判断一棵树是否是对称树知识点树的遍历、DFS结果实现码前思考我比较笨,使用的是先左边优先遍历一次,再右边优先遍历一次,判断两次结果是否相同来判断是否是对称树;(注意空结点也要进行储存,我这里用的是INT_MIN)代码实现//通过中序遍历来解题//要求先序遍历和后序遍历的结果是相同的/** * Definition for a binary tree node. * struct TreeNode { *.原创 2020-05-23 19:53:40 · 316 阅读 · 0 评论 -
LeetCode 104. Maximum Depth of Binary Tree【树的DFS、水题】
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述给定树的结构,求树的高度知识点树的遍历,DFS/BFS结果实现码前思考水题代码实现/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), .原创 2020-05-23 19:43:26 · 116 阅读 · 0 评论 -
LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal【重构二叉树模板题+序列坐标+二叉树型DFS】
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述即给定前序和中序遍历结果,然后构建二叉树知识点树的遍历,DFS结果实现码前思考模板题,是一类用于坐标确定的DFS题代码实现//模板题,冲//leetcode注意边界条件/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right;.原创 2020-05-23 19:40:41 · 156 阅读 · 0 评论 -
⭐⭐⭐⭐⭐【网格型DFS+BFS最短路究极版本】POJ 3083 Children of the Candy Corn
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述给定一个迷宫,S是起点,E是终点,# 是墙不可走,. 可以走先输出左转优先时,从S到E的步数再输出右转优先时,从S到E的步数最后输出S到E的最短步数W为宽,列数H为高,行数知识点DFS+BFS实现码前思考这是一道网格型DFS和BFS的大成之作,里面涉及了很多常见的操作;首先对于左优先和右优先,我们可以为它们设置不同的移动方向的顺序,这与之前做的POJ 2488 A Knights Journey一样,需要设置dir数组.原创 2020-05-23 19:33:17 · 275 阅读 · 0 评论 -
⭐⭐⭐⭐⭐【网格型DFS】POJ 2676 Sudoku
文章目录题目描述实现码前思考题目描述九宫格问题,也有人叫数独问题把一个9行9列的网格,再细分为9个 3*3 的子网格,要求每行、每列、每个子网格内都只能使用一次 1~9 中的一个数字,即每行、每列、每个子网格内都不允许出现相同的数字。0是待填位置,其他均为已填入的数字。要求填完九宫格并输出(如果有多种结果,则只需输出其中一种)如果给定的九宫格无法按要求填出来,则输出原来所输入的未填的九宫格。实现码前思考DFS试探,失败则回溯用三个数组进行标记每行、每列、每个子网格已用的数字,用于剪枝.原创 2020-05-23 19:13:32 · 176 阅读 · 0 评论 -
⭐⭐⭐⭐⭐【图的DFS进阶】最小路径串
文章目录题目描述题目大意实现码前思考代码实现码后反思题目描述题目大意从0号结点开始,找到到达每个结点的最小路径串,其中最小路径串的定义是按字典序的最小路径串。实现码前思考我居然想着使用Dijkstra来写,这也太绕弯了,结果还超时了,我吐了。。。我给hkt看了一下,hkt说用dfs来做:从0号结点开始,每次dfs时都优先dfs序号最小的结点,这样一定能保证最后得到的结果是正确的(这里有一定的思维量);这其实就是一道裸的图dfs,然后再此基础上增加了优先dfs序号小的结点;代码实现.原创 2020-05-23 19:04:35 · 316 阅读 · 0 评论 -
深度优先搜索(DFS)
深度优先搜索是一种枚举所有完整路径以遍历所有情况的搜索方法(暴力)文章目录引言问题的引出问题的解决背包问题一类常见的DFS问题的解决方法引言问题的引出问题的解决递归的问题,无不就是递归式和递归边界的问题。背包问题一类常见的DFS问题的解决方法...原创 2020-05-23 16:34:55 · 499 阅读 · 0 评论 -
⭐⭐⭐⭐⭐【网格型、暴力、DFS典型例题】POJ 2488 A Knights Journey
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述给出一个国际棋盘的大小,判断马能否不重复的走过所有格,并记录下其中按字典序排列的第一种路径。经典的“骑士游历”问题。知识点暴力DFS,都不用剪枝的那种。。。实现码前思考由于这里涉及到了坐标的移动,所以我们可以发动传统艺能,使用一个dir数组来存储x和y的增量;题目中要求以"lexicographically"方式输出,所以一定要理清楚8种移动方式的先后次序,是下面这样的:{{-1,-2},{1,-2},{-2,-1},{2,.原创 2020-05-20 20:03:59 · 336 阅读 · 0 评论 -
EOJ 3297. 铺瓷砖【斐波拉契数列的变式+记忆化搜索/DP】⭐⭐⭐⭐⭐
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述铺瓷砖单点时限: 2.0 sec 内存限制: 256 MB章鱼王的行宫要铺瓷砖了。 行宫中有一长度为 的地板,给定三种不同瓷砖:一种长度为1,一种长度为2,另一种长度为3,数目不限。要将这个长度为 的地板铺满,并且要求任意两个相邻的瓷砖长度均不等,一共有多少种不同的铺法?在所有的铺设方法中,一共用了长度为1的瓷砖多少块? 例如,长度为4的地面一共有如下3种铺法,并且,一共用了长度为1的瓷砖4块: 4=1+2+1.原创 2020-05-20 16:25:02 · 455 阅读 · 0 评论 -
⭐⭐⭐⭐⭐【图的遍历】POJ 1129 Channel Allocation
文章目录问题描述建模解题思路代码码后反思参考文档问题描述当一个广播电台在一个非常大的地区,广播站会用中继器来转播信号以使得每一个接收器都能接收到一个强烈的信号。然而,每个中继器必须慎重选择使用,使相邻的中继器不互相干扰。如果相邻的中继器使用不同的频道,那么就不会相互干扰。由于无线电频道是一有限的,一个给定的网络所需的中继频道数目应减至最低。编写一个程序,读取一个中继网络,然后求出需要的最低的不同频道数。建模一个有N个节点的无向图,要求对每个节点进行染色,使得相邻两个节点颜色都不同,问最少需要多.原创 2020-05-20 15:22:59 · 213 阅读 · 0 评论 -
⭐⭐⭐⭐⭐【应用型DFS+剪枝】A - Sticks
文章目录题目描述实现码前思考代码实现码后反思题目描述实现码前思考首先,你得想到怎么使用暴力解题?暴力的方法就是先将木棍们按照从大到小的顺序排列,然后从最大的木棍长度开始枚举到木棍总长度sum的一半的情况。看这个里面有没有可行性。上述的暴力解法,虽说暴力,但是肯定能够解题的,但是DFS操作通常都要涉及到剪枝的,不然很容易超时,所以肯定需要剪枝,在我看来,剪枝的操作是根据每个具体问题进行具体分析的,所以没啥特殊的模板,得看题目中隐藏的信息。对于每一个使用DFS进行解题的题目,需要明确DFS.原创 2020-05-18 22:50:20 · 241 阅读 · 0 评论 -
LeetCode 130. Surrounded Regions
并查集常用来解决连通性的问题,即将一个图中连通的部分划分出来。 根据算法导论,该数据结构常用于不相交问题分析。从边界扩展这个思路太棒了,相当于把问题转化为最大岛屿面积问题,????...原创 2020-04-06 17:45:50 · 312 阅读 · 0 评论 -
LeetCode 200. Number of Islands【深度优先搜索】
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述知识点深度优先搜索 或者 并查集结果我挺满意哒实现码前思考我是在并查集的章节里面看到这个题目的,但是由于题目的性质,我最后选择了使用DFS来解题,那是什么性质导致我选择DFS来解题呢?首先剥去小岛的外壳,我们可以发现这其实就是一个求连通分量的题目;对于这种在二维矩阵中上、下、左、右移动的题目,我们通常使用的...原创 2020-04-05 22:58:21 · 298 阅读 · 0 评论