zoukankan      html  css  js  c++  java
  • [LeetCode] 200. Number of Islands 岛屿的数量

         这道求岛屿数量的题的本质是求矩阵中连续区域的个数,很容易想到需要用深度优先搜索 DFS 来解,我们需要建立一个 visited 数组用来记录某个位置是否被访问过。由于本题没有要求不能破坏原矩阵,

    所以可以使用DFS的方法将矩阵中每一块连续的1都置为0,以此标记以访问过,则可以到空间复用的目的。特别重要的,在访问数组的时候一定要注意验证下标的大小,防止访问下标越界;和本题还可以使用

    BFS和并查集的方法,此处暂不讨论。

     1 /*
     2  * @Descripttion: 
     3  * @version: 
     4  * @Author: wangxf
     5  * @Date: 2020-04-12 16:38:48
     6  * @LastEditors: Do not edit
     7  * @LastEditTime: 2020-04-12 21:59:09
     8  */
     9 /*
    10  * @lc app=leetcode.cn id=200 lang=cpp
    11  *
    12  * [200] 岛屿数量
    13  */
    14 
    15 // @lc code=start
    16 #include<bits/stdc++.h>
    17 using namespace std;
    18 class Solution {
    19 public:
    20     int numIslands(vector<vector<char>>& grid) {
    21           int res = 0;
    22           if ((!grid.empty())&&grid.size()>0)//给定矩阵非空
    23           {
    24             for (int i = 0; i < grid.size(); i++)
    25                 for (int j = 0; j < grid[0].size(); j++)
    26                 {
    27                     if (grid[i][j] == '1')//遍历到岛屿
    28                     {
    29                         ++res;
    30                         dfs(grid,i,j);
    31                     }   
    32                 } 
    33           }
    34           return res;
    35     }
    36     
    37     void dfs(vector<vector<char>>& grid,int i,int j)
    38     { 
    39         if(!(i>=0&&i<grid.size()&&j>=0&&j<grid[0].size()))
    40         {
    41             return;
    42         }
    43         if(grid[i][j] == '0') return ;
    44         grid[i][j] = '0';//标记访问过,复用标记数组
    45       
    46         int step_row[4]={0,0,-1,1};
    47         int step_col[4]={-1,1,0,0};
    48         for(int k=0;k<4;++k)
    49         {
    50            dfs(grid,i+step_row[k],j+step_col[k]);
    51         }
    52         return; 
    53     }
    54 };
    55 // @lc code=end
  • 相关阅读:
    A physically based scene with three.js
    pbr-guide
    Art Pipeline for glTF
    GG5D
    Leetcode 146.LRU缓存机制
    Leetcode 143.重排链表
    Leetcode 142.环形链表II
    Leetcode 141.环形链表
    Leetcode 139.单词拆分
    Leetcode 138.复制带随机指针的链表
  • 原文地址:https://www.cnblogs.com/wangxf2019/p/12688058.html
Copyright © 2011-2022 走看看