![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DFS和BFS
少๑渊
可接课设,详情私聊
展开
-
力扣第1219题:黄金矿工(回溯)
一、题目分析二、题目分析这道题是很常规的回溯题,主要思路大概就是在主函数中,只要不为0的部分就都尝试一遍。在处理函数中,首先如果当前所在点周围没有可以访问的点了,就直接返回当前的黄金值,否则就依次遍历上下左右,找出最大的,这里有关回溯的点是:因为吗,每个点只能访问一次,所以在访问上下左右的时候,要先将当前点置0(节省isvisit空间),遍历之后在取消置零即可。这道题需要注意的点就是在写边界条件时看仔细,否则当你需要的...原创 2022-02-05 10:41:53 · 656 阅读 · 0 评论 -
力扣第1765题:地图中的最高点(多源BFS)
一、题目内容二、题目分析 这道题目很明显的一点在于,它告诉水域的高度,并且暗示我们其余点的高度要根据水域来求。也就是说,我不可以按行优先的方式进行遍历,然后求最小值,而是要通过BFS的方式,以水域为圆心,一层层的扩散开,直到全部遍历所有点。 这道题还有个不同的点在于,水域可能有多个,这说明在使用BFS的时候,我们一开始需要将所有水域都放在队列中。 我们还需要考虑的一点是,在以不同水域为圆心扩散的时候,难免要出现扩散区域重...原创 2022-01-29 12:07:06 · 1062 阅读 · 0 评论 -
力扣第994题:腐烂的橘子(BFS)
一、题目内容二、题目分析 这道题目是为了查找所有橘子均腐烂时候经过的最小时间,最佳方法是使用BFS,可以将每分钟看做遍历一层,直到遍历完为止。 首先我们要遍历一遍grid数组,找出新鲜橘子的数量count,当后续每次新鲜橘子被腐烂的时候,就让它减一,需要保证count大于0,在遍历grid的时候,还需要将最开始就是腐烂的橘子的坐标放进一个队列中去,以便后续调用。 之后我们在while循环中进行判断,取出队列中的队头,然后获取它...原创 2021-12-13 11:34:32 · 476 阅读 · 0 评论 -
力扣第797题:所有可能的路径(回溯、DFS)
一、题目内容二、代码class Solution { List<List<Integer>>list=new ArrayList<>(); List<Integer>templist=new ArrayList<>(); public List<List<Integer>> allPathsSourceTarget(int[][] graph...原创 2021-12-12 11:47:10 · 122 阅读 · 0 评论 -
力扣第1091题:二进制矩阵中的最短路径(BFS)
一、题目内容二、题目分析 在二维矩阵运算中,什么时候使用BFS,什么时候使用DFS呢?当我们需要查找一个结果是否存在的时候,可以使用DFS,因为它是先执行一种情况直到输出结果,如果不符合再继续寻找其他的,这样的话,当找到一个结果的时候就可以直接返回了。但是当我们的需求是找到最长或者最短的结果,那么最优的解法还是使用BFS,因为正如我上面说的,如果要用DFS,它会将每种情况都执行到出结果,那么为了找到符合条件的最短或最长结果,需求遍历所有结果,然后输出需要的那个。而...原创 2021-12-11 12:20:12 · 395 阅读 · 0 评论 -
力扣第117题:填充每个节点的下一个右侧节点指针(BFS)
一、题目内容二、题目分析 此题我们采用广度优先遍历算法进行解题,我们发现,每个节点的next总是指向同层的右边的那个节点(最后一个节点指向null)。那么我们是不是可以将节点按层一层层的放入队列,然后让他们的next依次等于下一个节点即可呢? 根据BFS基本套路,首先我们要while循环,里面的条件是队列不可以为空,如果就这样不加限制的话,最终的结果是每个节点都指向它先序遍历的下个节点,那是因为当前这层的最后一个节点会指向下一层的第一个节点。所以我...原创 2021-12-10 15:03:49 · 385 阅读 · 0 评论 -
力扣第200题:岛屿数量(广度优先搜索)
一、题目内容二、题目分析 那些“1”组成的陆地构成了一块块的岛屿,我们要找岛屿的数量,只需要通过深度遍历找到每一块岛屿的数量即可。老套路了。 代码:int cnt=0; public int numIslands(char[][] grid) { int m=grid.length; int n=grid[0].length; boolean[][]isvisited=new ...原创 2021-12-09 10:51:10 · 611 阅读 · 0 评论 -
剑指Offer 26.树的子结构(二叉树、深度优先搜索)
一、题目内容二、题目分析 这个问题主要有两个方面难以理解:如果B是A树中的一部分,那么B的头结点必然是A中的某一个节点,而B恰好是A中的那个节点的子部分。 如上图示例2,B是A中以4为头结点的一部分,那么我们需要怎么做呢?很简单,挨个选取A中的节点并作为头结点,然后与B同时向下遍历,直到B遍历完,那么B就是A的一部分了。 具体判断B是否为以某个节点开始的子部分的代码是: boolean ispart(TreeNode A...原创 2021-11-27 15:22:31 · 215 阅读 · 0 评论 -
剑指Offer 13.机器人的运动范围(搜索、DFS、BFS)
一、题目内容二、题目分析 本题可以有深度搜索和广度搜索两种方式,对于深度搜索来说,我们首先需要判断当前所在点是否在矩阵范围内,其次需要判断该点是否访问过,如果访问过就直接返回,否则就继续进行。我们接着获取坐标的数位和与k进行比较,如果大于k,还是返回,如果小于等于k的话就让符合条件的数加一。 接着对该点上下左右继续进行遍历,然后输出计数值count。 代码:class Solutio...原创 2021-11-26 21:33:06 · 546 阅读 · 0 评论 -
剑指Offer.12 矩阵中的路径(深度搜索、回溯)
一、题目内容二、题目分析 本题可以使用回溯算法来做,我们需要遍历给定的board,找到所有和word第一个字母开始的位置,如上图,我们需要遍历board,然后找到所有的A。然后从这些开始进行深度搜索,如果可以找到匹配的字符串,就返回true,否则返回false。当一种路径不行的时候,就要通过回溯回到上一步,再进行深度搜索。 对此,在主函数中,我们可以这样写 for(int i=0;i<board.leng...原创 2021-11-25 15:46:11 · 475 阅读 · 0 评论 -
力扣第102、103题:二叉树的(锯齿状)层序遍历(BFS)
一、二叉树的层序遍历 1、题目内容 2、题目分析 像这样一层层向下打印,用队列保存值输出即可 3、代码分析public List<List<Integer>> levelOrder(TreeNode root) { //输出最终结果的list List<List<Integer>> list=new ArrayList<Li...原创 2021-10-27 17:00:18 · 91 阅读 · 0 评论 -
力扣第279题:完全平方数(BFS和动态规划)
一、题目内容二、题目分析 BFS:public int numSquares(int n) { //BFS需要使用队列 Queue<Integer> queue=new LinkedList<>(); //判断是否计算过,避免重复计算 Set<Integer> visited=new HashSet<>(); queue.offer(0); visited.add(0); //记录完全平方...原创 2021-10-26 09:43:19 · 298 阅读 · 0 评论 -
力扣第494题:目标和(DFS,动态规划)
一、题目内容二、DFS做法 //记录解法数量 int count=0; public int findTargetSumWays(int[] nums, int target) { dfs(nums,target,0); return count; } private void dfs(int[] nums, int target,int index) { //如果当前树的深度等于nums数组的长...原创 2021-10-25 20:14:39 · 163 阅读 · 0 评论 -
力扣第139题:单词拆分(DFS,BFS,动态规划)
一、题目内容二、题目分析 对于这道题目我们首先要从头开始判断,一直到字符串结束为止。如下图一般,从0开始,读取c,发现并不在wordDict中,就继续读取a,直到读取到s之后,发现现在的字符串是cats,正好在给定的wordDict中,那么就从a开始,进行递归,递归的出口是当前的字符的个数是否等于给定字符串的长度,如果结果为是,就返回true。 那么我们将会得到这样一串代码public boolean dfs(String s, Li...原创 2021-10-24 21:49:31 · 565 阅读 · 0 评论 -
力扣第1302题:层数最深的叶子节点(DFS算法)
一、题目内容二、题目分析 很简单的题目,通过dfs获取树的高度,然后再判断当前叶子节点高度是否等于树的高度,是就让结果值加上叶子节点的值,否则就遍历左右子树。三、代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNod...原创 2021-10-23 15:18:50 · 1443 阅读 · 0 评论