当前位置: 首页 > news >正文

LeetCode —— dfs和bfs

797. 所有可能的路径

给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序)。 graph[i] 是一个从节点 i 可以访问的所有节点的列表(即从节点 i 到节点 graph[i][j]存在一条有向边)。

示例1:输入:graph = [[1,2],[3],[3],[]]         输出:[[0,1,3],[0,2,3]] 

示例2:输入:graph = [[4,3,1],[3,2,4],[3],[4],[]]      输出:[[0,4],[0,3,4],[0,1,3,4],[0,1,2,3,4],[0,1,4]]

// dfs
class Solution {List<List<Integer>> list = new ArrayList<>();LinkedList<Integer> path = new LinkedList<>();public List<List<Integer>> allPathsSourceTarget(int[][] graph) {path.add(0);dfs(graph, 0);return list;}public void dfs(int[][] graph, int node){if(node == graph.length - 1){list.add(new ArrayList<>(path));return;}for(int i = 0; i < graph[node].length; i++){path.add(graph[node][i]);dfs(graph, graph[node][i]);path.removeLast();}}
}

200. 岛屿数量

给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。

示例1:

输入:grid = [["1","1","1","1","0"],["1","1","0","1","0"],["1","1","0","0","0"],["0","0","0","0","0"]
]
输出:1
// dfs
class Solution {public int numIslands(char[][] grid) {int count = 0;for(int i = 0; i < grid.length; i++){for(int j = 0; j < grid[0].length; j++){if(grid[i][j] == '1'){count++;dfs(grid, i, j);}}}return count;}public void dfs(char[][] grid, int i, int j){if(i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] == '0'){return;}grid[i][j] = '0';dfs(grid, i - 1, j);dfs(grid, i + 1, j);dfs(grid, i, j - 1);dfs(grid, i, j + 1);}
}
// bfs
class Solution {public int numIslands(char[][] grid) {int count = 0;for(int i = 0; i < grid.length; i++){for(int j = 0; j < grid[0].length; j++){if(grid[i][j] == '1'){count++;bfs(grid, i, j);}}}return count;}public void bfs(char[][] grid, int i, int j){Queue<int[]> queue = new LinkedList<>();queue.offer(new int[]{i, j});while(!queue.isEmpty()){int[] cur = queue.poll();i = cur[0];j = cur[1];if(i >= 0 && i < grid.length && j >= 0 && j < grid[0].length && grid[i][j] == '1'){grid[i][j] = '0';queue.offer(new int[]{i - 1, j});queue.offer(new int[]{i + 1, j});queue.offer(new int[]{i, j - 1});queue.offer(new int[]{i, j + 1});}}}
}

695. 岛屿的最大面积

给你一个大小为 m x n 的二进制矩阵 grid 。岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。岛屿的面积是岛上值为 1 的单元格的数目。计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。

输入: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]]
输出:6
// dfs
class Solution {int area;public int maxAreaOfIsland(int[][] grid) {int maxArea = 0;for(int i = 0; i < grid.length; i++){for(int j = 0; j < grid[0].length; j++){if(grid[i][j] == 1){area = 0;dfs(grid, i, j);maxArea = Math.max(maxArea, area);}}}return maxArea;}public void dfs(int[][] grid, int i, int j){if(i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] == 0){return;}area++;grid[i][j] = 0;dfs(grid, i - 1, j);dfs(grid, i + 1, j);dfs(grid, i, j - 1);dfs(grid, i, j + 1);}
}
// bfs
class Solution {int area;public int maxAreaOfIsland(int[][] grid) {int maxArea = 0;for(int i = 0; i < grid.length; i++){for(int j = 0; j < grid[0].length; j++){if(grid[i][j] == 1){area = 0;bfs(grid, i, j);maxArea = Math.max(maxArea, area);}}}return maxArea;}public void bfs(int[][] grid, int i, int j){Queue<int[]> queue = new LinkedList<>();queue.offer(new int[]{i, j});while(!queue.isEmpty()){int[] cur = queue.poll();i = cur[0];j = cur[1];if(i >= 0 && i < grid.length && j >= 0 && j < grid[0].length && grid[i][j] == 1){area++;grid[i][j] = 0;queue.offer(new int[]{i - 1, j});queue.offer(new int[]{i + 1, j});queue.offer(new int[]{i, j - 1});queue.offer(new int[]{i, j + 1});}}}
}

1020. 飞地的数量

给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个海洋单元格、1 表示一个陆地单元格。一次 移动 是指从一个陆地单元格走到另一个相邻(上、下、左、右)的陆地单元格或跨过 grid 的边界。返回网格中 无法 在任意次数的移动中离开网格边界的陆地单元格的数量。

示例:输入:grid = [[0,0,0,0],[1,0,1,0],[0,1,1,0],[0,0,0,0]]         输出:3

// dfs
class Solution {public int numEnclaves(int[][] grid) {for(int i = 0; i < grid.length; i++){   if(grid[i][0] == 1){      // 左侧dfs(grid, i, 0);}if(grid[i][grid[0].length - 1] == 1){     // 右侧dfs(grid, i, grid[0].length - 1);}}for(int j = 1; j < grid[0].length - 1; j++){    if(grid[0][j] == 1){      // 上侧dfs(grid, 0, j);}if(grid[grid.length - 1][j] == 1){      // 下侧dfs(grid, grid.length - 1, j);}}int count = 0;for(int i = 0; i < grid.length; i++){for(int j = 0; j < grid[0].length; j++){if(grid[i][j] == 1){count++;}}}return count;}public void dfs(int[][] grid, int i, int j){if(i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] == 0){return;}grid[i][j] = 0;dfs(grid, i - 1, j);dfs(grid, i + 1, j);dfs(grid, i, j - 1);dfs(grid, i, j + 1);}
}
// bfs
class Solution {public int numEnclaves(int[][] grid) {for(int i = 0; i < grid.length; i++){if(grid[i][0] == 1){      // 左侧bfs(grid, i, 0);}if(grid[i][grid[0].length - 1] == 1){     // 右侧bfs(grid, i, grid[0].length - 1);}}for(int j = 1; j < grid[0].length - 1; j++){if(grid[0][j] == 1){      // 上侧bfs(grid, 0, j);}if(grid[grid.length - 1][j] == 1){      // 下侧bfs(grid, grid.length - 1, j);}}int count = 0;for(int i = 0; i < grid.length; i++){for(int j = 0; j < grid[0].length; j++){if(grid[i][j] == 1){count++;}}}return count;}public void bfs(int[][] grid, int i, int j){Queue<int[]> queue = new LinkedList<>();queue.offer(new int[]{i, j});while(!queue.isEmpty()){int[] cur = queue.poll();i = cur[0];j = cur[1];if(i >= 0 && i < grid.length && j >= 0 && j < grid[0].length && grid[i][j] == 1){grid[i][j] = 0;queue.offer(new int[]{i - 1, j});queue.offer(new int[]{i + 1, j});queue.offer(new int[]{i, j - 1});queue.offer(new int[]{i, j + 1});}}}
}

130. 被围绕的区域

给你一个 m x n 的矩阵 board ,由若干字符 'X' 和 'O' ,找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。

// dfs
class Solution {public void solve(char[][] board) {for(int i = 0; i < board.length; i++){if(board[i][0] == 'O'){dfs(board, i, 0);}if(board[i][board[0].length - 1] == 'O'){dfs(board, i, board[0].length - 1);}}for(int j = 1; j < board[0].length - 1; j++){if(board[0][j] == 'O'){dfs(board, 0, j);}if(board[board.length - 1][j] == 'O'){dfs(board, board.length - 1, j);}}for(int i = 0; i < board.length; i++){for(int j = 0; j < board[0].length; j++){if(board[i][j] == 'A'){board[i][j] = 'O';}else if(board[i][j] == 'O'){board[i][j] = 'X';}}}}public void dfs(char[][] board, int i, int j){if(i < 0 || i >= board.length || j < 0 || j >= board[0].length || board[i][j] == 'X' || board[i][j] == 'A'){return;}board[i][j] = 'A';dfs(board, i - 1, j);dfs(board, i + 1, j);dfs(board, i, j - 1);dfs(board, i, j + 1);}
}
// bfs
class Solution {public void solve(char[][] board) {for(int i = 0; i < board.length; i++){if(board[i][0] == 'O'){bfs(board, i, 0);}if(board[i][board[0].length - 1] == 'O'){bfs(board, i, board[0].length - 1);}}for(int j = 1; j < board[0].length - 1; j++){if(board[0][j] == 'O'){bfs(board, 0, j);}if(board[board.length - 1][j] == 'O'){bfs(board, board.length - 1, j);}}for(int i = 0; i < board.length; i++){for(int j = 0; j < board[0].length; j++){if(board[i][j] == 'A'){board[i][j] = 'O';}else if(board[i][j] == 'O'){board[i][j] = 'X';}}}}public void bfs(char[][] board, int i, int j){Queue<int[]> queue = new LinkedList<>();queue.offer(new int[]{i, j});while(!queue.isEmpty()){int[] cur = queue.poll();i = cur[0];j = cur[1];if(i >= 0 && i < board.length && j >= 0 && j < board[0].length && board[i][j] == 'O'){board[i][j] = 'A';queue.offer(new int[]{i - 1, j});queue.offer(new int[]{i + 1, j});queue.offer(new int[]{i, j - 1});queue.offer(new int[]{i, j + 1});}}}
}

相关文章:

LeetCode —— dfs和bfs

797. 所有可能的路径 给你一个有 n 个节点的 有向无环图&#xff08;DAG&#xff09;&#xff0c;请你找出所有从节点 0 到节点 n-1 的路径并输出&#xff08;不要求按特定顺序&#xff09;。 graph[i] 是一个从节点 i 可以访问的所有节点的列表&#xff08;即从节点 i 到节点…...

【ROS 2 基础-常用工具】-7 Rviz仿真机器人

所有内容请查看&#xff1a;博客学习目录_Howe_xixi的博客-CSDN博客...

循环神经网络(RNN)

定义 循环神经网络&#xff08;RNN&#xff09;是一种深度学习神经网络&#xff0c;专门用于处理序列数据&#xff0c;如文本、语音和时间序列数据。RNN的独特之处在于它具有循环连接&#xff0c;允许信息在网络内持续流动&#xff0c;以便处理先前的输入信息&#xff0c;具体…...

ESP32C3 LuatOS TM1650②动态显示累加整数

--注意:因使用了sys.wait()所有api需要在协程中使用 -- 用法实例 PROJECT "ESP32C3_TM1650" VERSION "1.0.0" _G.sys require("sys") local tm1650 require "tm1650"-- 拆分整数&#xff0c;并把最低位数存放在数组最大索引处 loc…...

文心一言 VS 讯飞星火 VS chatgpt (117)-- 算法导论10.3 2题

二、用go语言&#xff0c;对一组同构对象用单数组表示法实现&#xff0c;写出过程ALLOCATE-OBJECT和FREE-OBJECT。 文心一言&#xff1a; 在Go语言中&#xff0c;我们通常使用指针和结构体来表示和操作复杂的数据结构。对于一组同构对象&#xff0c;我们可以使用一个数组来存…...

专业修图软件 Affinity Photo 2 mac中文版编辑功能

Affinity Photo for Mac是应用在MacOS上的专业修图软件&#xff0c;支持多种文件格式&#xff0c;包括psD、PDF、SVG、Eps、TIFF、JPEG等。 Affinity Photo mac提供了许多高级图像编辑功能&#xff0c;如无限制的图层、非破坏性操作、高级的选择工具、高级的调整层、HDR合成、全…...

Excel 5s内导入20w条简单数据(不使用多线程)

文章目录 Excel 5s内导入20w条数据1. 生成20w条数据1.1 使用Excel 宏生成20w条数据1.2 生成成功 2. ExecutorType&#xff1a;批量操作执行器类型2.1 ExecutorType.SIMPLE2.2 ExecutorType.BATCH2.3 ExecutorType.REUSE 3. 20w条数据直接插入数据库3.1 使用ExecutorType.SIMPLE…...

计算机毕业设计 基于SpringBoot笔记记录分享网站的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…...

Windows Ubuntu子系统使用USB教程

Windows Ubuntu子系统使用USB教程 Windows Subsystem for Linux (WSL)允许您在Windows上运行Linux。以下指南涉及如何在WSL2中连接和使用USB设备。 WSL版本 在WSL内部运行 uname -a应该显示内核版本为5.10.60.1或更高版本。你需要运行WSL 2发行版本。 USB/IP 客户端工具 在W…...

如何理解TCP/IP协议?

一、是什么 TCP/IP&#xff0c;传输控制协议/网际协议&#xff0c;是指能够在多个不同网络间实现信息传输的协议簇 TCP&#xff08;传输控制协议&#xff09; 一种面向连接的、可靠的、基于字节流的传输层通信协议 IP&#xff08;网际协议&#xff09; 用于封包交换数据网…...

如何开发出来一款解决抖音本地生活的软件营销工具?

一、智能剪辑、矩阵分发、无人直播、爆款文案于一体独立应用开发 抖去推----主要针对本地生活的----移动端(小程序软件系统&#xff0c;目前是全国源头独立开发)&#xff0c;开发功能大拆解分享&#xff0c;功能大拆解&#xff1a; 7大模型剪辑法&#xff08;数学阶乘&#x…...

GO 语言如何用好变长参数?

函数重载 对于函数重载相信编码过的 xdm 肯定不会陌生&#xff0c;函数重载就是在同一个作用域内定义多个具有相同名称但参数列表不同的函数 此处的参数列表不同&#xff0c;可以是参数的类型不同&#xff0c;参数的个数不同 那么我们一起分别来看看 C 语言&#xff0c;C 语…...

怎么解决 Http 协议无状态?

一、Http 协议无状态的含义 1.1 有状态协议 常见的许多七层协议实际上是有状态的&#xff0c;例如 SMTP 协议&#xff0c;它的第一条消息必须是 HELO&#xff0c;用来握手&#xff0c;在 HELO 发送之前其他任何命令都是不能发送的&#xff1b;接下来一般要进行 AUTH 阶段&#…...

FlinkCDC for mysql to Clickhouse

完整依赖 <dependencies><!-- https://mvnrepository.com/artifact/org.apache.flink/flink-core --><dependency><groupId>org.apache.flink</groupId><artifactId>flink-core</artifactId><version>1.13.0</version>…...

沃通SSL证书服务多省区一体化政务服务平台

近年来&#xff0c;我国政务服务数字化水平不断提升&#xff0c;数字政府建设取得积极成效。依托全国一体化政务服务平台&#xff0c;政务服务效能不断提升&#xff0c;“一网通办”能力显著增强&#xff0c;为创新政府治理、优化营商环境提供了有力支撑。沃通SSL证书具备保护数…...

Linux程序地址

目录 一、定义 二、问题引出 三、虚拟地址和物理地址 &#xff08;一&#xff09;问题解释 &#xff08;二&#xff09;什么是进程地址空间 &#xff08;三&#xff09;为什么要有进程地址空间 一、定义 #include <stdio.h> #include <stdlib.h>//geten…...

华为OD k 对元素最小值(100分)【java】A卷+B卷

华为OD统一考试A卷+B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应20022部分考题以及新出的题目,A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载,请点击以下链接进入: 我用夸克网盘分享了「华为O…...

解决Unity打包时,Android SDK 报错问题

报错内容应该包括类似如下信息&#xff1a; CommandInvokationFailure: Failed to update Android SDK package list. java.lang.UnsupportedClassVersionError: com/android/prefs/AndroidLocationsProvider has been compiled by a more recent version of the Java Runtim…...

基于nodejs+vue 校园通勤车系统

但是管理好校园通勤车可视化又面临很多麻烦需要解决, 信息化已经成为主流,开发一个校园通勤车可视化系统小程序一方面的可能会更合乎时宜,困扰管理层的许多问题当中,校园通勤车 管理也是不敢忽视的一块。另一方面来说也可以提高在校园通勤车可视化管理方面的效率给相关管理人员…...

【JavaEE】Java多线程编程案例 -- 多线程篇(3)

Java多线程编程案例 1. 单例模式1.1 代码的简单实现1.2 懒汉模式的线程安全代码 2. 阻塞队列2.1 阻塞队列的概念2.2 使用库中的BlockingDeque2.3 模拟实现阻塞队列2.4 生产者消费者模型 3. 定时器3.1 概念3.2 使用库的定时器 - Timer类3.3 模拟实现定时器 4. 线程池4.1 概念4.2…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目&#xff0c;该项目是一个 Spring AI 快速入门的样例工程项目&#xff0c;旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计&#xff0c;每个模块都专注于特定的功能领域&#xff0c;便于学习和…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...

UE5 音效系统

一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类&#xff0c;将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix&#xff0c;将上述三个类翻入其中&#xff0c;通过它管理每个音乐…...