岛屿的数量

566 篇文章

已下架不支持订阅

472 篇文章

已下架不支持订阅

141 篇文章

已下架不支持订阅

题目描述

有一个 N 行 M 列的海图,海图中陆地使用 1 标记,海洋使用 0 标记,相邻陆地可以构成岛屿,请你计算出海图中岛屿的数量。

注意:若陆地 A 位于陆地 B 的上、下、左、右、左上、左下、右上、右下位置时,则陆地 A 和陆地 B 是相邻的。

输入描述

第一行输入两个整数 N 和 M,分别表示海图的行数和列数。

之后输入 N 行,每行 M 个数(只会取值0或1),其中 0 表示海洋,1 表示陆地。

输出描述

请输出岛屿的数量。

用例

输入 4 3
0 1 0
0 0 0
1 0 0
1 1 0
输出 2
说明

题目解析

本题是“孤岛”

已下架不支持订阅

### 计算岛屿数量算法 为了计算地图中的岛屿数量,可以通过深度优先搜索 (DFS) 或广度优先搜索 (BFS) 来实现。以下是基于 DFS 的解决方案: #### 方法概述 通过遍历整个维网格,当遇到一个未访问过的陆地 ('1') 时,启动一次 DFS 遍历来标记该陆地及其相连的所有陆地为已访问状态。每次完成这样的操作即表示发现了一座新的岛屿。 #### 实现代码 以下是一个 Python 版本的实现方法: ```python def numIslands(grid): if not grid or not grid[0]: return 0 m, n = len(grid), len(grid[0]) def dfs(i, j): if i < 0 or i >= m or j < 0 or j >= n or grid[i][j] != '1': return # 将当前节点标记为已访问 grid[i][j] = '#' # 对四个方向进递归探索 dfs(i + 1, j) # 向下 dfs(i - 1, j) # 向上 dfs(i, j + 1) # 向右 dfs(i, j - 1) # 向左 count = 0 for row in range(m): # 遍历每一 for col in range(n): # 遍历每一 if grid[row][col] == '1': # 如果找到一块新陆地 dfs(row, col) # 开始深搜并标记整片区域 count += 1 # 岛屿计数加一 return count ``` 上述代码中定义了一个辅助函数 `dfs`,用于递归地标记与当前位置 `(i,j)` 连接的所有陆地[^1]。主循环负责扫描整个网格图,在检测到尚未处理的新陆地时调用此函数,并增加岛屿总数。 #### 复杂度分析 - 时间复杂度:O(M * N),其中 M 和 N 是输入矩阵的高度和宽度。每个单元格最多只会被访问一次。 - 空间复杂度:最坏情况下 O(M * N),取决于递归栈的最大深度以及存储中间结果的空间需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员阿甘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值