当前位置: 首页 > 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…...

终极Unity游戏自动翻译指南:XUnity.AutoTranslator完全教程

终极Unity游戏自动翻译指南&#xff1a;XUnity.AutoTranslator完全教程 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 想要畅玩日文、韩文等外语Unity游戏却苦于语言障碍&#xff1f;XUnity.AutoTransla…...

第 8 集:PR Review:让 Claude Code 辅助代码审查

为什么需要AI辅助Review? 在软件开发中,代码审查(Code Review)是确保代码质量的关键环节。传统的人工审查虽然全面,但存在效率瓶颈:工程师需要投入大量时间处理重复性任务,如检查命名规范、测试覆盖率和代码重复等。这些任务往往机械且耗时,容易分散对核心问题的注意力…...

C++编写MCP网关配置全流程:从环境校验到压测调优的12个关键检查点

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;C编写高吞吐量 MCP 网关 配置步骤详解 构建高吞吐量的 MCP&#xff08;Message Control Protocol&#xff09;网关需兼顾低延迟、零拷贝内存管理和异步 I/O 调度。以下为基于现代 C20 与 libuv/Boost.A…...

机器学习分类模型决策边界可视化实战指南

1. 决策边界可视化&#xff1a;理解机器学习分类模型的核心工具 在机器学习分类任务中&#xff0c;模型就像一个黑箱——输入特征&#xff0c;输出预测结果。但模型究竟是如何做出决策的&#xff1f;这个问题困扰着许多从业者。决策边界可视化正是打开这个黑箱的一把钥匙。 决…...

AgentBench:大语言模型智能体综合评估平台深度解析与实践指南

1. 项目概述&#xff1a;AgentBench是什么&#xff0c;以及它为何重要如果你最近在关注大语言模型&#xff08;LLM&#xff09;和智能体&#xff08;Agent&#xff09;领域&#xff0c;大概率已经听过“THUDM/AgentBench”这个名字。这不仅仅是一个GitHub上的开源项目&#xff…...

轻量级API网关Lunaroute:嵌入式设计与微服务流量治理实践

1. 项目概述&#xff1a;一个轻量级、高性能的API网关最近在梳理团队内部微服务架构的治理方案时&#xff0c;我又重新审视了API网关这个核心组件。市面上成熟的网关产品很多&#xff0c;像Kong、Tyk、APISIX等&#xff0c;功能强大&#xff0c;生态完善&#xff0c;但对于一些…...

AMBA总线桥接技术BP136的设计与验证实践

1. AMBA总线桥接技术背景解析在复杂SoC设计中&#xff0c;AMBA总线架构作为ARM体系下的核心互连标准&#xff0c;其演进历程直接反映了处理器性能与系统复杂度的提升轨迹。2003年推出的AMBA3 AXI协议相比1999年发布的AMBA2 AHB&#xff0c;在突发传输、多主设备支持等方面实现了…...

AI驱动开发工具全景解析:从GitHub Copilot到工作流重构

1. 项目概述&#xff1a;当AI成为你的编程搭档如果你是一名开发者&#xff0c;最近可能已经感受到了身边的变化。以前&#xff0c;我们写代码、查文档、调试Bug&#xff0c;大部分时间都在和IDE、搜索引擎、以及偶尔的Stack Overflow打交道。但现在&#xff0c;一个全新的“同事…...

7步精通SMAPI:星露谷物语模组加载器的终极实战指南

7步精通SMAPI&#xff1a;星露谷物语模组加载器的终极实战指南 【免费下载链接】SMAPI The modding API for Stardew Valley. 项目地址: https://gitcode.com/gh_mirrors/smap/SMAPI 你是否曾经因为星露谷物语模组安装失败而烦恼&#xff1f;面对复杂的文件结构、版本冲…...

HyperAgent开源框架:构建AI智能体的状态管理与工具集成实践

1. 项目概述&#xff1a;一个面向AI智能体的开源框架最近在折腾AI智能体&#xff08;Agent&#xff09;相关的项目&#xff0c;发现了一个挺有意思的开源框架——HyperAgent。这名字听起来就挺“超”的&#xff0c;HyperBrowserAI团队出品。简单来说&#xff0c;它不是一个具体…...