非空进入循环queue.add(第一个数据)while(!queue.isEmpty()) {//【第2步】 获取当前队列长度即同一层级(辈分)节点个数,并遍历intsize = queue.size();//一定要先获取,queue后面要加入下一层级节点for(inti = 0; i < size; i++) {//【第3步】 对同一层级节点逐个寻找下一层有效**
②图的搜索问题:上面我们使用了BFS来解决图的最短路径问题,同时我们也可以使用DFS来实现图的最短路径寻找。在这里我们分别提供递归版模板和用stack的迭代版模板: 递归: booleanDFS(Node cur, Node target, Set<Node> visited){returntrueifcuristarget;for(next : each neighbor of cur) {if(nextisnotinvisited)...
这道题的核心是:对每一个未被访问的陆地进行一次 DFS 或 BFS,将整块陆地标记为已访问,岛屿数量 +1。 ✅ 方法一:DFS 深度优先遍历 从每个为'1'的位置出发,递归淹没它相邻的陆地; 每次新的 DFS 开始,即发现了一个新的岛屿。 funcnumIslands(grid[][]byte)int{m,n:=len(grid),len(grid[0])vardfsfun...
✅ Go 实现(空间优化版) funcrob(nums[]int)int{iflen(nums)==0{return0}iflen(nums)==1{returnnums[0]}prev,curr:=0,0for_,num:=rangenums{prev,curr=curr,max(curr,prev+num)}returncurr}funcmax(a,bint)int{ifa>b{returna}returnb} 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12...
解法一:DFS Node 类详细解释 DFS 解法 类定义部分 克隆图的函数 深度优先搜索(DFS) 结束 举例说明:DFS 执行过程 DFS 节点的克隆 DFS 邻居的克隆 初始克隆过程 克隆节点2和节点4的邻居 完成克隆 DFS 复杂度分析 解法二:BFS BFS 解法复杂度分析 举例:BFS 的具体执行过程 ...
算法4:搜索算法(DFS/BFS) 搜索算法是一套简单直接思想,所以我们通过一道道题来看搜索算法的思想,会比单说算法是什么,更让人有印象。 DFS Problem 1: Leetcode 40 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使...
prev, curr :=0,0for_, num :=rangenums { prev, curr = curr, max(curr, prev+num) }returncurr }funcmax(a, bint)int{ifa > b {returna }returnb } 🟩 二、279. 完全平方数 📌 题目描述 给你一个整数n,将其表示为若干个完全平方数的和,求这些数的最少数量。
🌊 BFS/DFS 实战:岛屿数量 & 腐烂的橘子(LeetCode 200 & 994) 两道图论基础题,涉及 BFS 与 DFS 的应用,主要用于掌握二维网格中遍历与标记访问的技巧: 🏝️ 200. 岛屿数量(Number of Islands) 🍊 994. 腐烂的橘子(Rotting Oranges) 🏝️ 一、200. 岛屿数量 ...
解法三,DFS 深度优先搜索 解法四,BFS 广度优先搜索 读题 解法一,动态规划 dp 思路: 本题不适合用贪心算法 -- 一定要逐个选择面值最大的硬币?不一定。对于[1, 3, 5, 6, 7], amount=30. 方案一:7*4+1+1=30,一共用了6枚硬币;方案二:6*5=30,一共用了5枚面值为6的硬币,硬币数量反而更少了。
BFS(使用quene实现) class Solution { public: int numIslands(vector<vector<char>>& grid) { int nr = grid.size(); if (!nr) return 0; int nc = grid[0].size(); int num_islands = 0; for (int r = 0; r < nr; ++r) { for (int c = 0; c < nc; ++c) { if (grid[r][...