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

图论 | 岛屿数量(深搜,广搜)

岛屿数量

acm模式:99.岛屿数量
核心代码模式: 200. 岛屿数量

思路

  1. 遍历grid,如果它是1,则通过bfs/dfs将这个小岛的grid变为0

dfs

def dfs(grid,i,j):
    if i<0 or j<0 or i>=len(grid) or j>=len(grid[0]):
        return
    if grid[i][j] == 0:
        return
    else:
        grid[i][j] = 0
    dfs(grid,i-1,j)
    dfs(grid,i+1,j)
    dfs(grid,i,j-1)
    dfs(grid,i,j+1)
    
def main():
    # 构造岛屿
    n,m = map(int,input().split())
    grid = []
    for _ in range(n):
        grid.append(list(map(int,input().split()))) 
    
    res = 0
    for i in range(len(grid)):
        for j in range(len(grid[0])):
            if grid[i][j] == 1:
                res = res+1
                dfs(grid,i,j)
    print(res)
    

if __name__ == "__main__":
    main()  

bfs

from collections import deque

def bfs(grid,i,j):
    queue = deque([(i,j)])
    while queue:
        i,j = queue.popleft()
        if i>=0 and i<len(grid) and j>=0 and j<len(grid[0]) and grid[i][j]==1:
            grid[i][j] = 0
            queue.append((i-1,j))
            queue.append((i+1,j))
            queue.append((i,j-1))
            queue.append((i,j+1))

def main():
    # 构造岛屿
    n,m = map(int,input().split())
    grid = []
    for _ in range(n):
        grid.append(list(map(int,input().split()))) 
    
    res = 0
    for i in range(len(grid)):
        for j in range(len(grid[0])):
            if grid[i][j] == 1:
                res = res+1
                bfs(grid,i,j)
    print(res)
    

if __name__ == "__main__":
    main()  

http://www.kler.cn/a/598488.html

相关文章:

  • 虾皮(Shopee)商品ID获取商品详情请求示例
  • Android Compose 约束布局(ConstraintLayout、Modifier.constrainAs)源码深度剖析(十二)
  • 【完整版】DeepSeek-R1大模型学习笔记(架构、训练、Infra、复现代码)
  • SQL的DCL,DDL,DML和DQL分别是什么
  • 2025-03-21 Unity 序列化 —— 自定义2进制序列化
  • 面试常问系列(一)-神经网络参数初始化
  • NLP高频面试题(十一)——RLHF的流程有哪些
  • ModuleNotFoundError: No module named ‘flask‘ 错误
  • 堆的相关要点以及模拟实现
  • 《可爱风格 2048 游戏项目:HTML 实现全解析》
  • 前后端开发概述:架构、技术栈与未来趋势
  • Linux系统移植篇(十)根文件系统构建 V3 - Yocto
  • 第8章:Docker数据持久化与卷管理
  • 基于Matlab的大气湍流光束传输特性的研究
  • Android Compose 层叠布局(ZStack、Surface)源码深度剖析(十三)
  • Android 根据Url使用Retrofit框架进行文件下载
  • 从复杂到集成:APVSG系列多通道相参矢量信号源重塑量子比特(Qubit )信号生成技术
  • qt 对QObject::tr()函数进行重定向
  • Haption Virtuose力反馈设备在CAVE投影系统中提供真实训练交互
  • 基于虚拟知识图谱的语义化决策引擎