岛屿数量

给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。

岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。

此外,你可以假设该网格的四条边均被水包围。

示例 1:

输入:
11110
11010
11000
00000
输出: 1

示例 2:

输入:
11000
11000
00100
00011
输出: 3
解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。

题解

利用dfs逐个标记

class Solution {
private:
void dfs(vector<vector<char>>& grid, int r, int c) {
int nr = grid.size(); // nr为二维网格的长
int nc = grid[0].size(); // nc 为二维网格的宽 grid[r][c] = '0'; // 把当前遍历到的位置(无论陆地还是水 都置为0
// dfs 找连在一块的陆地
if (r - 1 >= 0 && grid[r-1][c] == '1') dfs(grid, r - 1, c);// 左侧
if (r + 1 < nr && grid[r+1][c] == '1') dfs(grid, r + 1, c);// 右侧
if (c - 1 >= 0 && grid[r][c-1] == '1') dfs(grid, r, c - 1);// 上方
if (c + 1 < nc && grid[r][c+1] == '1') dfs(grid, r, c + 1);// 下方
} public:
int numIslands(vector<vector<char>>& grid) {
int nr = grid.size(); // nr为二维网格的长
if (!nr) return 0; // 长为0 直接跳出
int nc = grid[0].size(); // nc 为二维网格的宽 int num_islands = 0; // 记录岛屿数
// 二层循环逐个遍历
for (int r = 0; r < nr; ++r) {
for (int c = 0; c < nc; ++c) {
if (grid[r][c] == '1') { // 若为陆地
++num_islands; // 岛屿加一
dfs(grid, r, c); // 进入dfs
}
}
}
return num_islands;
}
};

最新文章

  1. Android手机刷recovery
  2. - &gt; code vs 3038 3n+1问题(递归)
  3. maven国内镜像(maven下载慢的解决方法)
  4. Google账户无法登陆-Solved
  5. leetcode题解: Remove Duplicates from Sorted List(已排序单链表去重)
  6. 怎么让一个非窗口组件可以接受来自Windows的消息
  7. PE文件格式详解(上)
  8. 不可不知的表达式树(3)定制IQueryProvider
  9. python-list操作
  10. mysql多实例配置下,用脚本启动mysql时,出现Please read &quot;Security&quot; section of the manual to find out how to run mysqld as root!
  11. 爬虫-day01-基础知识
  12. AngularJS中介者模式实例
  13. ES6知识整理(7)--Set和Map数据结构
  14. Linux其他:环境变量配置
  15. DateUtils 通用类
  16. icape3 的使用
  17. PHP封装成应用程序的三个方案
  18. 15-Call to your teacher(有向图的连通判断)
  19. Wunder Fund Round 2016 (Div. 1 + Div. 2 combined) F. Double Knapsack 鸽巢原理 构造
  20. CSS: The resize Property

热门文章

  1. Mac IDEA 免激活破解版 亲测有效 2020.8.1记
  2. Azure Load Balancer(二) 基于内部的负载均衡来转发为访问请求
  3. Java项目中经常遇到的一些异常情况
  4. c语言学习笔记之结构体存储
  5. 【Canal】数据同步的终极解决方案,阿里巴巴开源的Canal框架当之无愧!!
  6. Vue3 为何使用 Proxy 实现数据监听
  7. OpenCV开发笔记(六十九):红胖子8分钟带你使用传统方法识别已知物体(图文并茂+浅显易懂+程序源码)
  8. Visual Studio安装
  9. Linux快速搭建C/C++开发环境
  10. unity3d学习笔记(一) 第一人称视角实现和倒计时实现