【广度优先搜索-中等】1905. 统计子岛屿

广度优先算法算法BFS的原理及C++实现 本文详细介绍了广度优先搜索(BFS)算法的原理、实现和应用。BFS是一种基于队列的图遍历算法,其核心思想是按层次遍历节点,适用于求解无权图的最短路径问题。文章阐述了BFS的状态转移过程、时间复杂度分析(O(n)或O(m)),并提供了多种实现方式(包括常规队列、滚动队列优化等)。典型应用场景包括游戏地图寻路、网络拓扑分析等。文中还给出了C++实现代码、测试用例和性能优化技巧,并附有相关算法题目分类和难度分级。最后提供了作者的教学视频和算法资料下载链接。 阅读详情

【题目】
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
【代码】
【方法1】深度优先
在这里插入图片描述

class Solution:
    def countSubIslands(self, grid1: List[List[int]], grid2: List[List[int]]) -> int:
        cnt=0        
        def dfs(x,y):
            if x>=0 and x<len(grid2) and y>=0 and y<len(grid2[0]) and grid2[x][y]==1:
                grid2[x][y]=0
                return grid1[x][y] & dfs(x-1,y) & dfs(x+1,y) & dfs(x,y-1) & dfs(x,y+1)
            return True
        for i in range(len(grid2)):
            for j in range(len(grid2[0])):
                if grid2[i][j]==1:
                    cnt+=dfs(i,j)
        return cnt

【方法2】广度优先
在这里插入图片描述

class Solution:
    def countSubIslands(self, grid1: List[List[int]], grid2: List[List[int]]) -> int:
        m, n = len(grid1), len(grid1[0])
        def bfs(sx: int, sy: int) -> int:
            q = deque([(sx, sy)])
            grid2[sx][sy] = 0
            # 判断岛屿包含的每一个格子是否都在 grid1 中出现了
            check = (grid1[sx][sy] == 1)
            while q:
                x, y = q.popleft()
                for nx, ny in ((x - 1, y), (x + 1, y), (x, y - 1), (x, y + 1)):
                    if 0 <= nx < m and 0 <= ny < n and grid2[nx][ny] == 1:
                        q.append((nx, ny))
                        grid2[nx][ny] = 0
                        if grid1[nx][ny] != 1:
                            check = False
            return int(check)

        ans = 0
        for i in range(m):
            for j in range(n):
                if grid2[i][j] == 1:
                    ans += bfs(i, j)
        return ans

双屏DPI缩放问题全解析:从原理到实战解决窗口大小突变 DPI(每英寸点数)缩放是现代操作系统在多显示器环境下实现界面适配的核心技术。其原理是通过虚拟分辨率映射,在不同物理像素密度的屏幕上维持一致的视觉尺寸。这项技术的价值在于解决了高分辨率屏幕显示内容过小的问题,保障了跨屏工作流的视觉连续性。然而,在混合DPI环境(如4K屏与1080p屏组合)中,显卡驱动逻辑与应用程序DPI感知的协同问题,常导致窗口跨屏时出现剧烈缩放、尺寸错乱。这直接影响多屏办公、设计协作等需要频繁拖拽窗口的应用场景。本文聚焦于**显卡驱动**配置与**应用程序兼容性**设置,提供一套从系统底 阅读详情

相关推荐

Transformer数学推导——Q38 旋转位置编码(RoPE)的复数形式 对注意力分数的几何影响分析

RoPE 的复数形式为自然语言处理中的位置编码提供了创新且有效的解决方案。通过深入的数学理论分析,明确了其对注意力分数的几何影响及在捕捉位置信息方面的优势。在 LLM 的实际应用中,RoPE 复数形式在多个任务和场景中展现出强大的性能,特别是在处理长序列文本时,能够有效捕捉长距离依赖、缓解位置编码局限性并提升处理效率。然而,RoPE 复数形式也面临计算复杂度高、超参数调整困难和位置信息平衡等挑战。通过合理的优化策略和与其他技术的结合,有望进一步提升其性能。

墨顿随笔 1420

Python运算符

Python运算符 算术运算符 比较(关系)运算符 赋值运算符 逻辑运算符 成员运算符 位运算符 身份运算符 运算符优先级 1.算术运算符 实例: ----------------加法----------------- a = 10 b = 3 pri...

weixin_33705053的博客 917

Crossformer实战:从零开始搭建多变量时间序列预测模型(附ETTh1数据集调参指南)

本文提供了从零开始搭建Crossformer多变量时间序列预测模型的实战指南,并附有详细的ETTh1数据集调参攻略。文章深入解析了Crossformer的核心设计,重点探讨了seg_len和win_size等关键参数对模型性能的影响,并分享了环境配置、训练调试及常见问题的解决方案,帮助开发者高效应用这一前沿深度学习模型。

weixin_29281915的博客 325

【LeetCode】1905 and 67(DFS解决岛屿问题4 and 二进制求和运算)

本文继续从实例出发,熟悉⼆维矩阵的 DFS 代码框架的使用。同时探讨二进制求和相关问题。

wsc的博客 553

金蝶EAS uploadlogo漏洞实战:如何快速检测你的系统是否受影响

本文详细解析了金蝶EAS uploadlogo任意文件上传漏洞的检测与防护方法,帮助企业安全团队快速识别系统风险。通过资产发现、漏洞验证和应急响应方案,有效防范财务数据泄露和系统入侵风险,提升企业整体安全防护能力。

weixin_29322553的博客 389

2025年最新自动化/控制保研夏令营&预推免面试真题分享(东南大学苏州校区/华东理工/南航/天大)

笔者来2021级本科自动化专业,以下部分将介绍我在夏令营以及预推免期间发生经历和问题。

Control Everything 2584

Leetcode1905. 统计子岛屿(medium)

Leetcode1905. 统计子岛屿(medium),Python题解,广度优先搜索,图论基础题

chenxy_bwave的专栏 555

【深度学习】什么是交叉注意力机制?

输入序列:自注意力机制在同一个输入序列内建立注意力,交叉注意力机制在不同的输入序列间建立注意力。应用场景:自注意力机制多用于单一模态的任务(如纯文本任务),交叉注意力机制多用于多模态任务(如图像和文本的结合)。计算过程:自注意力机制的查询、键和值都来自同一个输入序列,而交叉注意力机制的查询来自一个输入序列,键和值来自另一个输入序列。

q742971636的博客 7373

【LeetCode】1905-统计子岛屿

给你两个 m x n 的二进制矩阵 grid1 和 grid2 ,它们只包含 0 (表示水域)和 1 (表示陆地)。一个 岛屿 是由 四个方向 (水平或者竖直)上相邻的 1 组成的区域。任何矩阵以外的区域都视为水域。如果 grid2 的一个岛屿,被 grid1 的一个岛屿 完全 包含,也就是说 grid2 中该岛屿的每一个格子都被 grid1 中同一个岛屿完全包含,那么我们称 grid2 中的这个岛屿为 子岛屿 。请你返回 grid2 中 子岛屿 的 数目 。...

qq_45972928的博客 160

Python开发MCP Client

全部例子只是MCP Client访问MCP Server的过程,那么这样其实就失去了MCP协议的创建的初衷,和大模型集成后才能发挥MCP最大的作用。

Criss@陈磊 2973

10、利用智能合约实现公平的私有集合交集

本文探讨了利用智能合约实现公平的私有集合交集(PSI)的多种协议,重点分析了协议 Π 和 Π∗ 的气体成本与性能特点。同时对比了包括 Justitia 和 Anesidora 在内的现有方案,突出了仅使用智能合约实现硬币补偿公平性的优势。文中还介绍了相关密码学基础、安全模型及隐私保障机制,为在不同应用场景下选择高效、安全的 PSI 协议提供了理论支持和实践指导。

linux的博客 97

【LeetCode 深度优先搜索专项】统计子岛屿(1905)

【LeetCode 深度优先搜索专项】统计子岛屿(1905)

weixin_37780776的博客 405

Windows密码忘了怎么办?一分钟看懂Windows密码底层机制:无需重装系统也能无痕找回登录密码

忘记Windows开机密码,不一定非得重装系统!本文手把手教你通过提取NTLM Hash值实现“无痕找回密码”,无需PE、无需清除密码,对系统零修改 🛡️ 搭配mimikatz与在线解密平台,小白也能快速上手,了解Windows密码底层机制 🔐

XiaoqiangClub的博客 131

1905. 统计子岛屿

我的做法是先在grid2上面搜索,每遇到一个连通图就遍历这个图,每个被遍历的节点都找一个grid1是否存在,不存在就return false。

qigezuishuaide的博客 96

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

DFS 算法秒杀五道岛屿问题

读完本文,可以去力扣解决如下题目:200.岛屿数量(中等)1254.统计封闭岛屿的数目(中等)1020.飞地的数量(中等)1905.统计子岛屿(中等)694.不同的岛屿数量(中等)岛屿问题...

fdl123456的博客 623

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Leetcode 1905. Count Sub Islands

文章作者:Tyan 博客:noahsnail.com  |  优快云  |  简书 1. Description 2. Solution **解析:**Version 1,以第二个矩阵中碰到的1作为起点,然后使用广度优先搜索找到所有相邻的1,即一个岛屿,并将所有岛的坐标保存到队列中(值为1的坐标),将矩阵二中搜索的点对应的值设为2,防止重复搜索,搜索过程中需要同时检查搜索的点是否是矩阵一种的岛屿,如果不是,将标志位设为False,最后根据标志位判断是否是矩阵一种的

SnailTyan 368

岛屿类问题解法及思路

讲解算法中关于岛屿知识点,带你理解和掌握啥是岛屿问题及其拓展!!

努力成为更好的自己~~~ 578

社招面试题目【算法模板(1),Python基础语言教程

判断这个数是否小于两个节,小于就返回其有多少个就返回多少个。#统计1到n-1的每一个节点。#用for循环把每个相连的节点放入里面,构建出我们想要的图。

2401_83947353的博客 933

LeetCode岛屿问题:DFS、BFS与并查集算法详解

连通区域分析是图论中的基础概念,通过检测相邻元素的连通性来解决实际问题。其核心原理包括深度优先搜索(DFS)、广度优先搜索(BFS)和并查集(Union-Find)三种经典算法,分别采用递归栈、队列和树结构实现连通性判断。这些算法在图像处理、社交网络分析等领域具有重要技术价值,能高效解决岛屿计数、物体识别等场景问题。以LeetCode 200题为例,DFS通过标记访问节点避免重复计算,BFS采用层级遍历优化空间复杂度,而并查集则擅长处理动态连通性问题。掌握这些算法的实现差异和性能特点,对面试算法题和工程实践

csxc65837的博客 412

LeetCode 题解随笔:图论(二)(DFS与BFS)

LeetCode 题解随笔:图论 刷题顺序参考:代码随想录

weixin_44114160的博客 621

【算法模板】BFS秒杀模板,2024年最新Python面试基础

判断这个数是否小于两个节,小于就返回其有多少个就返回多少个。#统计1到n-1的每一个节点。#用for循环把每个相连的节点放入里面,构建出我们想要的图。#用一个数组对每个节点的入度进行统计#先把入度为一的节点放入队列中,也就是上图中最外面的那些节点。res = None#使用队列进行循环#进行多源BFS#出队并且对每一层的节点放入到res数组中#对每个节点的子节点进行循环判断#因为我们是先删除最外面的节点,但是随着外面的节点被删除,则和外面连接的节点的入度也会随着减一。

2301_82242273的博客 1268

网格(Grid)

网格(Grid)

yake1965 487

普通二本的辛酸Python面试之路,【算法模板,被阿里面试官征服了

思路:本题就是一个多源的扩散问题,按照上图我们可以让四个陆地都进行一个,则需要几次同时扩撒本题的结果就是多少!代码:class Solution:def maxDistance(self, grid: List[List[int]]) -> int:#检查边缘def check(i,j,m,n):if i >= 0 and j >= 0 and i < m and j < n:return Trueelse:return Falsen = len(grid)#上下四周的方向d = [(1,0),(-1,0)

2401_83621541的博客 699

算法刷题总结 (二) 回溯与深广搜与并查集算法

回溯与深广搜有相似的做法和理解,所以把他们放在同一个文章之中,文章看似篇幅很长,实际上,题目都是相似的,顺着章节来可以很快的掌握这个算法内容,以后碰到这样的相似题目,会很快想出思路。 回溯是递归的纵横拓展,主要是递归(纵)+局部暴力枚举(横)。所以可以从递归和暴力两个方面来拆解回溯问题。

UK - UofL HW - SDE 1784

算法学习(十六)递归回溯

1> 使用哈希表存储答案,使用mark标记已访问的防止重复搜索,状态较少(<32)时用一个int即可题目说明实现464. 我能赢吗使用int记录已选数字我的提交1387. 将整数按权重排序使用int记录已计算过的我的提交1361. 验证二叉树记录每个节点为根时其下的节点数目,直到等于n我的提交2745. 构造最长的新字符串只要知道每个串剩余数量和前一个串类型,就能唯一确定最大长度,故采用状态压缩dfs我的提交2> 岛屿问题:曼哈顿距离,广度优先搜索,某一性质(边界)扩散,通过更改标记防止重复搜索题目。

qq_42767993的博客 1001

Leetcode 子序列

402. 移掉 K 位数字 1218. 最长定差子序列

yake1965 823
上一篇: 【广度优先搜索-中等】130. 被围绕的区域
下一篇: 【广度优先搜索-中等】1905. 统计子岛屿
菜菜2022
博客等级 码龄9年 67粉丝 1033原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值