• 200. Number of Islands


    问题:

    给定数组0代表海水,1代表陆地,若陆地上下左右皆为海水,那么则称该陆地为一小岛。

    求给定数组中有多少小岛。

    Example 1:
    Input:
    11110
    11010
    11000
    00000
    
    Output: 1
    
    
    Example 2:
    Input:
    11000
    11000
    00100
    00011
    
    Output: 3
    

      

    解法:

    图的DFS,深度优先搜索。

    遍历图,

    若遇到小岛陆地‘1’,则发现新岛,res++,并由此点DFS,(上下左右四个方向)遍历全岛,标记为0,即沉掉整座岛。

    之后再发现新岛陆地‘1’,则为新岛。

    代码参考:

     1 class Solution {
     2 public:
     3     void visited(int i, int j, int m, int n, vector<vector<char>>& grid){
     4         if(i<0 || i>=n || j<0 || j>=m || grid[i][j]=='0') return;
     5         grid[i][j]='0';
     6         visited(i-1,j,m,n,grid);
     7         visited(i+1,j,m,n,grid);
     8         visited(i,j-1,m,n,grid);
     9         visited(i,j+1,m,n,grid);
    10         return;
    11     }
    12     int numIslands(vector<vector<char>>& grid) {
    13         int i, j, n, m;
    14         int res=0;
    15         n=grid.size();
    16         if(n==0) return 0;
    17         m=grid[0].size();
    18         for(i=0; i<n; i++){
    19             for(j=0; j<m; j++){
    20                 if(grid[i][j]=='1'){
    21                     res++;
    22                     visited(i, j, m, n, grid);
    23                 }
    24             }
    25         }
    26         return res;
    27     }
    28 };
  • 相关阅读:
    ESlint 格式化代码 备忘
    css 点击样式,水波纹(记录备用)
    RabbitMq 报错记录
    sql For xml path('') 备忘
    .net core Area独立成单独的dll文件
    刷shipid 简便方法
    实际操作--create DB link
    POS VB
    设置PL/SQL 快捷键
    要开始学习C#
  • 原文地址:https://www.cnblogs.com/habibah-chang/p/12802652.html
Copyright © 2020-2023  润新知