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

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

岛屿数量

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.dtcms.com/a/85453.html

相关文章:

  • 【动态规划】下降路径最小和
  • 【笔记分享】NCS/Zephyr 使能SPI SD卡方法介绍
  • C语言入门教程100讲(39)文件读写
  • 第二章 EXI协议原理与实现--8.4 对-2/-20所有命令的测试结果
  • JVM的组成及各部分的作用
  • 数据结构 -- 线索二叉树
  • 深度学习Python编程:从入门到工程实践
  • centos7连不上接网络
  • scoop安装教程与bug记录以及常用命令(教程总结)
  • Java算法队列和栈经常用到的ArrayDeque
  • Linux文件系统与磁盘管理
  • Java并发编程(2)
  • 华为Pura先锋盛典及鸿蒙智家产品发布,空气算法重构健康家居“阔”美学
  • UI-TARS与Midscene.js自动化探索
  • 【计算机网络】网络编程
  • 使用AI一步一步实现若依(21)
  • Koupleless 是一种模块化的 Serverless 技术解决方案
  • 系统性能评测和可靠性基础——可靠性、可用性、可维护性
  • 图解神经网络和强化学习
  • 【Go】Go语言结构体笔记
  • Ubuntu Docker 安装
  • STM32八股【3】------RAM和片上FLASH
  • 高并发系统中的限流策略:滑动窗口限流与Redis实现
  • 【QT】一文学会 QT 多线程(QThread )
  • Qt开发:QComboBox的使用
  • C++学习之云盘上传文件列表下载
  • C#基础学习(三)值类型和引用类型:编程世界的“现金“ vs “银行卡“,以及string这个“渣男“的叛变行为
  • 2059-Authentication plugin ‘caching_sha2_password‘ cannot be loaded
  • 【C++初阶】从零开始模拟实现vector(含迭代器失效详细讲解)
  • 大数据运维实战之YARN任务内存泄露排查实战:从节点掉线到精准定位的完整指南