首页 > 试题广场 >

岛屿数量

[编程题]岛屿数量
  • 热度指数:120897 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
岛屿: 相邻陆地可以组成一个岛屿(相邻:上下左右) 判断岛屿个数。
例如:
输入
[
[1,1,0,0,0],
[0,1,0,1,1],
[0,0,0,1,1],
[0,0,0,0,0],
[0,0,1,1,1]
]
对应的输出为3
(注:存储的01数据其实是字符'0','1')
示例1

输入

[[1,1,0,0,0],[0,1,0,1,1],[0,0,0,1,1],[0,0,0,0,0],[0,0,1,1,1]]

输出

3
示例2

输入

[[0]]

输出

0
示例3

输入

[[1,1],[1,1]]

输出

1

备注:
01矩阵范围<=200*200
头像 牛客题解官
发表于 2022-04-22 12:30:30
精华题解 题目主要信息: 给一个01矩阵,1代表是陆地,0代表海洋,如果两个1相邻,则这两个1属于同一个岛 只考虑上下左右为相邻 判断岛屿的个数 举一反三: 学习完本题的思路你可以解决如下题目: BM61. 矩阵最长递增路径 方法一:dfs(推荐使用) 知识点:深度优先搜索(dfs) 深度优先搜索一般用于 展开全文
头像 数据结构和算法
发表于 2021-04-02 17:20:34
1,DFS解决 这题让求的是岛屿的面积,二维数组中值是1的都是岛屿,如果多个1是连着的,那么他们只能算一个岛屿。 最简单的一种方式就是遍历数组中的每一个值,如果是1就说明是岛屿,然后把它置为0或者其他的字符都可以,只要不是1就行,然后再遍历他的上下左右4个位置。如果是1,说明这两个岛屿是连着的,只能 展开全文
头像 LifelongCode
发表于 2020-12-24 15:29:51
参考:1. https://blog.csdn.net/dongmuyang/article/details/944083242. https://www.imooc.com/article/291766思路: 遍历整块大陆,横着竖着遍历都可以。 第一次碰到陆地的时候,就知道这是块岛屿了,所以将这 展开全文
头像 月关雨辰
发表于 2021-08-27 02:06:58
> *题解链接:*> https://leetcode-cn.com/problems/number-of-islands/solution/dao-yu-lei-wen-ti-de-tong-yong-jie-fa-dfs-bian-li-/> 作者:nettee> 链接: 展开全文
头像 飘过的小牛
发表于 2021-03-15 15:25:01
分析:考察的数据结构是二位数组,考察的算法是dfs 或者 bfs。但是bfs 要用队列来存临时数据,一般还是 dfs 用得比较多,全部交给机器。哈哈,这两个是以前我最怕的,没想到现在处理起来这么从容,是写得最快的。 首先要理解 dfs 和 bfs 的含义,并不是刻板的一个算法模板,而是一个算法的思路 展开全文
头像 菜鸡孙连城
发表于 2022-03-23 19:46:04
DFS 最简单的一种方式就是遍历数组中的每一个值,如果是1就说明是岛屿,然后把它置为0或者其他的字符都可以,只要不是1就行,然后再遍历他的上下左右4个位置。如果是1,说明这两个岛屿是连着的,只能算是一个岛屿,我们还要把它置为0,然后再以它为中心遍历他的上下左右4个位置……。如果是0,就说明不是岛屿, 展开全文
头像 Quan_2022
发表于 2021-09-24 23:03:04
// 栈实现深度优先遍历 dfs class Solution { public: int solve(vector<vector<char>>& grid) { int m = grid.size(), n = grid[0].size(); 展开全文
头像 190409杨冬斌
发表于 2021-02-03 17:37:23
import java.util.*; public class Solution { /** * 判断岛屿数量 * @param grid char字符型二维数组 * @return int整型 */ public int solve 展开全文
头像 破竹GYH
发表于 2022-02-19 16:57:27
```/** * 判断岛屿数量 * @param grid char字符型二维数组 * @param gridRowLen int grid数组行数 * @param gridColLen int* grid数组列数 * @return int整型 * * C语言声明定义全局变量请加 展开全文
头像 TTThanos
发表于 2022-06-23 16:22:35
本题使用了dfs来进行岛屿数的计算。 首先介绍dfs,当地图上的一个格子是陆地的时候,那么我们会很自然地想知道他周围的格子是否也是陆地。所以当发现矩阵中某个元素为‘1’时(其index 为 r, c),我们首先将其置为 0, 意思为我们已经踏足了该陆地格子,之后从它出发的 四个方向[(r - 1, 展开全文
头像 Maokt
发表于 2021-07-24 10:11:55
算法思想一:深度优先搜索 解题思路: 可以将二维网格看成一个无向图,竖直或水平相邻的 1 之间有边相连。 为了求出岛屿的数量,可以扫描整个二维网格。如果一个位置为 1,则以其为起始节点开始进行深度优先搜索(四周)。在深度优先搜索的过程中,每个搜索到的 1 都会被重新标记为 0。 最终岛屿 展开全文