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

【代码随想录】刷题记录(115)-岛屿数量(广搜)

题目描述:

题目描述

给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。

输入描述

第一行包含两个整数 N, M,表示矩阵的行数和列数。

后续 N 行,每行包含 M 个数字,数字为 1 或者 0。

输出描述

输出一个整数,表示岛屿的数量。如果不存在岛屿,则输出 0。

输入示例

4 5
1 1 0 0 0
1 1 0 0 0
0 0 1 0 0
0 0 0 1 1

输出示例

3

提示信息

 

 

根据测试案例中所展示,岛屿数量共有 3 个,所以输出 3。

 

数据范围:

1 <= N, M <= 50

 

我的作答:

广度搜索就是一圈一圈向外直到搜索到边界;

from collections import deque

def bfs(grid, visited, cur_x, cur_y):
    que = deque([]) #使用队列进行迭代
    que.append([cur_x, cur_y])
    direction = [[0, 1], [1, 0], [0, -1], [-1, 0]]
    while que:
        cur_x, cur_y = que.popleft()
        for i, j in direction:
          next_x = cur_x+i
          next_y = cur_y+j
          if next_x<0 or next_x>len(grid)-1 or next_y<0 or next_y>len(grid[0])-1:
              continue
          if not visited[next_x][next_y] and grid[next_x][next_y]:
              visited[next_x][next_y] = True
              que.append([next_x, next_y])

N, M = map(int, input().split())
grid = []
res = 0
for _ in range(N):
    grid.append(list(map(int, input().split())))
visited = [[False]*M for _ in range(N)]
for i in range(N):
    for j in range(M):
        if not visited[i][j] and grid[i][j]:
            visited[i][j] = True
            res += 1
            bfs(grid, visited, i, j)
print(res)

犯了个小错误,一开始传入的参数的que不是i,j,后来发现这样不行,因为没有返回que,相当于que是局部变量,导致报错,然后改这个比较麻烦,就把参数换成索引了;

 

参考:

 


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

相关文章:

  • Vue3 从入门到精通:全面掌握前端框架的进阶之路
  • Java 设计模式之组合模式
  • Windows 图形显示驱动开发-WDDM 2.0 -Gpu段
  • 云计算——ACA学习 云计算分类
  • ESP学习-1(MicroPython VSCode开发环境搭建)
  • Redis——优惠券秒杀问题(分布式id、一人多单超卖、乐悲锁、CAS、分布式锁、Redisson)
  • 百度宣布:免费!
  • Next.js【详解】CSS 样式方案
  • 【MySQL — 数据库基础】深入解析 MySQL 的联合查询
  • 支付宝 IoT 设备入门宝典(上)设备管理篇
  • 20250214 随笔 Nginx 负载均衡在数据库中的应用
  • JavaScript + HTML5 Canvas 实现互动爱心雨
  • UE5中的快捷键汇总
  • Java实现MinIO上传PDF文件并配置浏览器在线打开而非下载
  • 智能协同:数据集成平台与DeepSeek驱动的数据分析与智能调度革新
  • 新版电脑通过wepe安装系统
  • 2. 图片性能优化
  • Vue笔记(十)
  • NIO 和 AIO 的区别?
  • elementuiPlus日期范围选择el-date-picker动态禁用时间选择