• LeetCode 200. 岛屿的个数(Number of Islands)


    题目描述

    给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。

    示例 1:

    输入:
    11110
    11010
    11000
    00000
    
    输出: 1
    

    示例 2:

    输入:
    11000
    11000
    00100
    00011
    
    输出: 3

    解题思路

     深度优先搜索,访问到以个为‘1’的点首先将其置‘0’,并将岛屿个数加一,然后分别按照右-下-左-上的顺序递归搜索矩阵并置‘1’为‘0’。

    代码

     1 class Solution {
     2 public:
     3     int numIslands(vector<vector<char>>& grid) {
     4         if(grid.empty()) return 0;
     5         int rows = grid.size(), cols = grid[0].size();
     6         int lands = 0;
     7         for(int i = 0; i < rows; i++){
     8             for(int j = 0; j < cols; j++){
     9                 if(grid[i][j] == '1'){
    10                     find(grid, i, j);
    11                     lands++;
    12                 }
    13             }
    14         }
    15         return lands;
    16     }
    17     void find(vector<vector<char>>& grid, int i, int j){
    18         grid[i][j] = '0';
    19         int rows = grid.size(), cols = grid[0].size();
    20         if(j < cols - 1 && grid[i][j + 1] == '1') find(grid, i, j + 1);
    21         if(i < rows - 1 && grid[i + 1][j] == '1') find(grid, i + 1, j);
    22         if(j > 0 && grid[i][j - 1] == '1') find(grid, i, j - 1);
    23         if(i > 0 && grid[i - 1][j] == '1') find(grid, i - 1, j);
    24     }
    25 };
  • 相关阅读:
    RAID技术
    Mysql的用户基本操作
    LNMP之Php的安装配置
    java 实现图片拼接
    java 实现Serv-U FTP 和 SFTP 上传 下载
    Image合并添加文字内容
    AOP切面用于系统日志
    网页评论实现
    java web 实体类生成
    java接口调试思想
  • 原文地址:https://www.cnblogs.com/wmx24/p/10006420.html
Copyright © 2020-2023  润新知