深度优先搜索|417, 1020, 1254

news/2024/10/17 22:14:55/

深度优先搜索|417. 太平洋大西洋水流问题,1020. 飞地的数量,1254. 统计封闭岛屿的数目

  • 太平洋大西洋水流问题
  • 飞地的数量
  • 统计封闭岛屿的数目

太平洋大西洋水流问题

这道题只能写逆流!!顺流试了好几次内存都不够,所以只能从海洋出发,然后看那些地方是可以达到的,这是见过的第二个逆流问题了,上一题是130题。
写法上这个dfs没有return,所以就是其实回溯不需要明确的终止,如果需要的话走完也可以。

class Solution:def pacificAtlantic(self, heights: List[List[int]]) -> List[List[int]]:def dfs(i,j,matrix):matrix[i][j] = True for k1,k2 in [[i-1,j],[i+1,j],[i,j-1],[i,j+1]]:if (0 <= k1 < m and 0 <= k2 < n) and matrix[k1][k2] == True: continueif (0 <= k1 < m and 0 <= k2 < n) and heights[k1][k2] >=  heights[i][j]:dfs(k1,k2,matrix)m = len(heights)n = len(heights[0])Pa = [[False]*n for _ in range(m)]At = [[False]*n for _ in range(m)]res = []for i in range(m):dfs(i,0,Pa)dfs(i,n-1,At)for j in range(n):dfs(0,j,Pa)dfs(m-1,j,At)for i in range(m):for j in range(n):if Pa[i][j] and At[i][j]:res.append([i,j])return res

飞地的数量

和130是一样的题,也是从外到里比较好做。

class Solution:def numEnclaves(self, grid: List[List[int]]) -> int:def dfs(i,j):grid[i][j] = 0for k1,k2 in [[i-1,j],[i+1,j],[i,j+1],[i,j-1]]:if (0 <= k1 < m and 0<= k2 < n) and grid[k1][k2] == 1:dfs(k1,k2)m = len(grid)n = len(grid[0])for i in range(m):if grid[i][0] == 1: dfs(i,0)if grid[i][n-1] == 1: dfs(i,n-1)for j in range(n):if grid[0][j] == 1: dfs(0,j)if grid[m-1][j] == 1: dfs(m-1,j)return sum(sum(grid[i]) for i in range(m))

统计封闭岛屿的数目

一样的问题顺手做了,我这里的思路就是先把没有被包围的岛(0)转成水(1),然后再去找被包围的岛。

class Solution:def closedIsland(self, grid: List[List[int]]) -> int:def dfs(i,j):grid[i][j] = 1for k1,k2 in [[i-1,j],[i+1,j],[i,j+1],[i,j-1]]:if (0 <= k1 < m and 0<= k2 < n) and grid[k1][k2] == 0:dfs(k1,k2)m = len(grid)n = len(grid[0])for i in range(m):if grid[i][0] == 0: dfs(i,0)if grid[i][n-1] == 0: dfs(i,n-1)for j in range(n):if grid[0][j] == 0: dfs(0,j)if grid[m-1][j] == 0: dfs(m-1,j)#print(grid)res = 0for i in range(m):for j in range(n):if grid[i][j] == 0:dfs(i,j)res += 1return res

http://www.ppmy.cn/news/1003161.html

相关文章

CAD产品设计逆向软件 FARO RevEng Crack

CAD产品设计逆向软件 FARO RevEng 软件平台能为用户带来全面的数字设计体验。该反向工程软件有助于利用三维点云创建和编辑高质量的网格和 CAD 表面&#xff0c;以实现反向工程工作流程。然后&#xff0c;工业设计师可以利用这些网格模型进行进一步设计或三维打印。 RevEng 的商…

结构体和 Json 相互转换(序列化反序列化)

关于 JSON 数据 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也 易于机器解析和生成。RESTfull Api 接口中返回的数据都是 json 数据。 Json 的基本格式如下&#xff1a; { "a": "Hello", "b": "…

自创送别诗比赛——送别诗

自创送别诗比赛——送别诗 规则&#xff1a; 1&#xff1a;必须原创&#xff0c;不得使用其他工具 2&#xff1a;必须是边塞诗 3&#xff1a;时间控制在1小时 4&#xff1a;可以不写名字和标题 ****** 现代【**骞】 离别之时情难舍&#xff0c; 相聚已成过去形。 岁月…

【JS交互篇】BOM基础、Window、Location、Navagator、Screen、History对象

一、BOM 概述 在 JavaScript 语言中有三种对象&#xff1a;内置对象、宿主对象、自定义对象。 宿主对象就是执行 JavaScript 脚本的环境所提供的对象。对于网页编程来说&#xff0c;js 是运行在浏览器上的&#xff0c;所以对于网页编程来说&#xff0c;宿主对象就是浏览器对象…

数据库导出Excel格式的表结构

数据库导出Excel格式的表结构 你是否遇到到导出数据库里面的表结构&#xff0c;包含字段名称、类型、长度、小数、默认值、字段描述之类的需求&#xff1b;当我们去navcat里面找时发现没有&#xff0c;因为navcat没有提供这一功能&#xff0c;他只可以导出表结构的sql&#xff…

H5实现签字版签名功能

前言&#xff1a;H5时常需要给C端用户签名的功能&#xff0c;以下是基于Taro框架开发的H5页面实现 一、用到的技术库 签字库&#xff1a;react-signature-canvas主流React Hooks 库&#xff1a;ahooks 二、组件具体实现 解决H5样式问题&#xff0c;主要还是通过两套样式实现…

Mr. Cappuccino的第58杯咖啡——MacOS配置Maven和Java环境

MacOS配置Maven和Java环境 查看Mac使用的是哪个shell下载并准备Maven下载Maven配置前准备 下载并安装JDK下载JDK安装JDK 配置Maven和Java环境添加配置加载配置 验证环境 查看Mac使用的是哪个shell echo $SHELL如果使用的是bash&#xff0c;则使用以下命令 open ~/.bash_profi…

visual studio 生成dll文件以及修改输出dll文件名称操作

目录 visual studio 生成dll文件以及修改dll文件名称一、准备测试代码二、设置导出dll属性三、生成dll文件 .lib .dll .pdb 的简单介绍dll文件使用方式lib文件使用方式1、动态链接 &#xff08;原理&#xff09;2、静态链接&#xff1a; visual studio 生成dll文件以及修改dll文…