zoukankan      html  css  js  c++  java
  • 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 };
  • 相关阅读:
    QA问答系统,QA匹配论文学习笔记
    HMM Viterbi算法 详解
    py2 to py3 return iterator
    git 的回退
    mysql之group_concat函数详解
    sqlserver系统表使用
    Spring事务配置的五种方式
    MySQL 触发器简单实例
    64位Java开发平台的选择,如何区分JDK,Tomcat,eclipse的32位与64版本
    HSSFWorkbook和XSSFWorkbook的区别
  • 原文地址:https://www.cnblogs.com/wmx24/p/10006420.html
Copyright © 2011-2022 走看看