BFS
leetCode广度优先搜索题目
消灭猕猴桃
保持热爱,奔赴山海
展开
-
[leetCode]547. 朋友圈
题目链接:https://leetcode-cn.com/problems/friend-circles班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知第 i 个和 j 个学生互为朋友关系,否则为不知道。你必须输出所有学生中的已知的朋友圈总数。示例原创 2020-11-15 16:46:16 · 146 阅读 · 0 评论 -
[leetCode]103. 二叉树的锯齿形层序遍历
题目链接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层序遍历如下:[ [3], [20,9], [1原创 2020-12-22 12:00:40 · 159 阅读 · 0 评论 -
[leetCode]752. 打开转盘锁
题目https://leetcode-cn.com/problems/open-the-lock/BFS锁的每一个数字都可以代表一个节点,锁一共右四个拨轮,每个拨轮有两个选择: 向上拨,这样每个节点与8个节点相连,这就相当于一幅图,题目要求的是求最小的次数,因此可以利用广度优先搜索的特性。搜索过程中有一些点需要跳过: 1. 已经走过的的点,防止死循环; 2. deadends中的点。class Solution { public int openLock(String[] deaden原创 2020-12-21 18:29:53 · 196 阅读 · 0 评论 -
[leetCode]127. 单词接龙
题目链接:https://leetcode-cn.com/problems/word-ladder给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则:每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回 0。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复的单词。你可以假设 beginWord 和 endWord原创 2020-11-05 10:11:17 · 84 阅读 · 0 评论 -
[leetCode]279. 完全平方数
题目链接:https://leetcode-cn.com/problems/perfect-squares给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3 解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.BFS本题等价于求最短路径的问题。将每个整数当成一个树的节点,下一个节点值为当前节点值减去原创 2020-11-14 21:05:40 · 102 阅读 · 0 评论 -
[leetCode]1091. 二进制矩阵中的最短路径
题目https://leetcode-cn.com/problems/shortest-path-in-binary-matrix/在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1)。一条从左上角到右下角、长度为 k 的畅通路径,由满足下述条件的单元格 C_1, C_2, ..., C_k 组成:相邻单元格 C_i 和 C_{i+1} 在八个方向之一上连通(此时,C_i 和 C_{i+1} 不同且共享边或角)C_1 位于 (0, 0)(即,值为 grid[0][0]原创 2020-11-14 19:59:48 · 206 阅读 · 0 评论 -
[leetCode]200. 岛屿数量
dfs遍历二维网格,如果网格值为“1”则以该网格为起点进行深度优先遍历,在搜索过程中值为1的网格都置为“0”。这样深度优先搜索的次数就是岛屿的数量。class Solution { public int numIslands(char[][] grid) { int num = 0; int rows = grid.length; int cols = grid[0].length; for (int row = 0; row &.原创 2020-10-19 18:08:10 · 162 阅读 · 0 评论 -
[leetCode]542. 01 矩阵
BFS将所有的0构建为一个超级0,用超级0到终点的最短路径等价于多个源点到终点的最短路径class Solution { // 定义一个方向数组 static int[][] dirs = new int[][]{{1,0}, {0,1}, {-1, 0}, {0, -1}}; public int[][] updateMatrix(int[][] matrix) { int m = matrix.length; int n = matrix[0原创 2020-10-17 16:16:32 · 87 阅读 · 1 评论 -
[leetCode]1293. 网格中的最短路径
class Solution { // 代表一个搜索状态 class Nagoto { int x; // (x,y)为当前网格的坐标 int y; int rest; // 剩余能消除障碍的数量 Nagoto(int x, int y, int rest) { this.x = x; this.y = y; this.rest = rest; .原创 2020-10-16 12:31:40 · 382 阅读 · 0 评论 -
[leetCode]1036. 逃离大迷宫
广度优先搜索class Solution { // 定义一个方向数组 static int[][] directions = new int[][]{{0, 1}, {1, 0}, {-1, 0},{0, -1}}; // X,Y的上限 static int limit = (int)1e6; public boolean isEscapePossible(int[][] blocked, int[] source, int[] target) { .原创 2020-10-15 10:53:36 · 273 阅读 · 0 评论 -
[leetCode]199. 二叉树的右视图
BFS使用一个队列,从左向右遍历每一层,将每层最右侧的节点值加入答案当中/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { List<Integer> a原创 2020-10-13 20:18:17 · 107 阅读 · 0 评论