【LeetCode & 剑指offer 刷题笔记】目录(持续更新中...)

Number of Islands

Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.
Example 1:
Input:
11110
11010
11000
00000
Output: 1

Example 2:
Input:
11000
11000
00100
00011
Output: 3


C++

类似题目: 13 机器人的运动范围  Word Search(系列)
    这道求岛屿数量的题的本质是求矩阵中连续区域的个数,很容易想到需要用深度优先搜索DFS来解,我们需要建立一个visited数组用来记录某个位置是否被访问过,
    对于一个为‘1’且未被访问过的位置,我们递归进入其上下左右位置上为‘1’的数,将其visited对应值赋为true,继续进入其所有相连的邻位置,这样可以将这个连通区域所有的数找出来,并将其对应的visited中的值赋true,
    找完次区域后,我们将结果res自增1,然后我们在继续找下一个为‘1’且未被访问过的位置,以此类推直至遍历完整个原数组即可得到最终结果,代码如下:
class Solution {
public:
    int numIslands(vector<vector<char> > &grid)
    {
        if (grid.empty() || grid[0].empty()) return 0;
       
        int m = grid.size(), n = grid[0].size();
        int result = 0;
        vector<vector<bool> > visited(m, vector<bool>(n, false)); //创建访问矩阵
        for (int i = 0; i < m; i++) //遍历栅格中所有元素(因为每个点都有可能为某个岛屿的某点)
        {
            for (int j = 0; j < n; j++)
            {
                if (grid[i][j] == '1' && !visited[i][j]) {
                    numIslandsDFS(grid, visited, i, j); //向相邻方向(上下左右)走当遇到越界,或者遇到0或者遇到访问过的1后,递归函数退出,所有递归分支退出后,该递归函数结束,找到一个岛屿
                    result++; //统计岛屿的个数
                }
            }
        }
        return result;
    }
    void numIslandsDFS(vector<vector<char> > &grid, vector<vector<bool> > &visited, int x, int y) {
        if (x < 0 || x >= grid.size()) return;
        if (y < 0 || y >= grid[0].size()) return; //超出范围时退出
        if (grid[x][y] != '1' || visited[x][y]) return; //如果不为1或者访问过就退出
       
        visited[x][y] = true;
        numIslandsDFS(grid, visited, x - 1, y);
        numIslandsDFS(grid, visited, x + 1, y);
        numIslandsDFS(grid, visited, x, y - 1);
        numIslandsDFS(grid, visited, x, y + 1);
    }
};

转自:https://www.cnblogs.com/grandyang/p/4402656.html

转载于:https://www.cnblogs.com/wikiwen/p/10229466.html

【LeetCode 剑指offer刷题】回溯法与暴力枚举法题6:Number of Islands相关推荐

  1. 【LeetCode 剑指offer刷题】树题6:28 对称二叉树(101. Symmetric Tree)

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) 101. Symmetric Tree /**  * Definition for a binary tree no ...

  2. 【LeetCode 剑指offer刷题】树题16:Kth Smallest Element in a BST

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) Kth Smallest Element in a BST Given a binary search tree, ...

  3. 【LeetCode 剑指offer刷题】数组题2:57 有序数组中和为s的两个数(167 Two Sum II - Input array is sorted)...

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) 57 有序数组中和为s的两个数 题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是 ...

  4. 【LeetCode 剑指offer刷题】字符串题6:67 把字符串转成整数

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) 67 把字符串转成整数 题目描述 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符 ...

  5. 【LeetCode 剑指offer刷题】查找与排序题14:Wiggle Sort(系列)

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) Wiggle Sort II Given an unsorted array nums, reorder it su ...

  6. 【LeetCode 剑指offer刷题】查找与排序题12:Top K Frequent Elements

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) Top K Frequent Elements Given a non-empty array of integer ...

  7. 【LeetCode 剑指offer刷题】矩阵题1:4 有序矩阵中的查找( 74. Search a 2D Matrix )(系列)...

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) 74. Search a 2D Matrix Write an efficient algorithm that s ...

  8. 【LeetCode 剑指offer刷题】树题19:8 二叉树中序遍历的下一个结点

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) 8 二叉树中序遍历的下一个结点 题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注 ...

  9. 【LeetCode 剑指offer刷题】字符串题12:Valid Palindrome(回文词系列)

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) Valid Palindrome Given a string, determine if it is a pali ...

最新文章

  1. 【论文速读】基于图像的伪激光雷达三维目标检测
  2. 360度无死角、近距离看「CNN」训练,是种什么体验?网友:美得不真实
  3. torch 多维topk
  4. HarmonyOS之AI能力·通用文字识别技术
  5. Linux--安装截图工具Shutter
  6. thinkphp5连接数据库mysql_ThinkPHP学习(三)配置PHP5支持MySQL,连接MySQL数据库
  7. vue2 自定义事件 v-model .sync
  8. Perl面向对象编程
  9. uniapp实现滑动导航
  10. 【写博客常用】美赛成绩如何快速查询!
  11. .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  12. 0.96寸OLED 的驱动原理及代码(IIC模式)
  13. vim keymap
  14. 简单批处理内部命令简介
  15. 2.12美团点评技术
  16. 棋类游戏-五子棋小游戏
  17. 天津大学仁爱学院ACM队简介
  18. 字节跳动测开面经(两面 + HR)
  19. 7⽂件查找和压缩问题和练习
  20. 猿大师播放器有哪些不同的版本,分别适合哪些不同需求的场景?

热门文章

  1. vue----第一个工程项目
  2. 【水滴石穿】react-native-book
  3. 20165310java_blog_week6
  4. Jira 自定义工作流
  5. 浅谈企业MES与ERP系统集成
  6. objective-c 中代码块(blocks)
  7. Javascript 笔记与总结(1-4)this
  8. SSL:Ubuntu证书配置
  9. server 2008 IIS 7下asp.net开发环境部署及配置
  10. u大侠pe系统桌面计算机,详解各种PE启动的过程