zoukankan      html  css  js  c++  java
  • 岛屿数量

    题目链接:https://leetcode-cn.com/problems/number-of-islands
    题目描述:
    给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。
    岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
    此外,你可以假设该网格的四条边均被水包围。

    示例 1:
    输入:grid = [
    ["1","1","1","1","0"],
    ["1","1","0","1","0"],
    ["1","1","0","0","0"],
    ["0","0","0","0","0"]
    ]
    输出:1

    示例 2:
    输入:grid = [
    ["1","1","0","0","0"],
    ["1","1","0","0","0"],
    ["0","0","1","0","0"],
    ["0","0","0","1","1"]
    ]
    输出:3

    提示:
    m == grid.length
    n == grid[i].length
    1 <= m, n <= 300
    grid[i][j] 的值为 '0' 或 '1'

    题解:

    class Solution {
    public:
        int numIslands(vector<vector<char>>& grid) {
           int ans = 0;
           for(int i = 0; i < grid.size(); i++)
           {
               for(int j = 0; j < grid[0].size(); j++)
               {
                   if(grid[i][j] == '1')
                   {
                       ans++; 
                       dfs(grid, i, j);
                   }
               }
           }
           return ans;
        }
        void dfs(vector<vector<char>>& grid, int r, int c)
        {
            //base 判断是否越界
            if(!isLands(grid, r, c))
                return;
            if(grid[r][c] != '1')
                return;
            //标记已经访问过的点
            grid[r][c] = '2';
            //遍历周围点
            dfs(grid, r - 1, c);
            dfs(grid, r + 1, c);
            dfs(grid, r, c - 1);
            dfs(grid, r, c + 1);
        }
        bool isLands(vector<vector<char>>& grid, int r, int c)
        {
            return (r >= 0 && r < grid.size() && c >= 0 && c <grid[0].size());
        }
    };
    
    
  • 相关阅读:
    网络爬虫的基本原理(一)
    灵光一闪-软件应用
    sql语句变量定义和样例
    windows+linux环境部署搭建
    jdk1.6安装
    系统部署
    tomcat部署
    maven各种插件在总结
    maven项目tomcat部署问题
    两种数据源
  • 原文地址:https://www.cnblogs.com/ZigHello/p/15368428.html
Copyright © 2011-2022 走看看