zoukankan      html  css  js  c++  java
  • 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 };
  • 相关阅读:
    iOS开发 当前时间 时间戳 转换
    iOS开发 下滑隐藏Tabbar
    iOS开发 浅见runloop
    iOS开发 检测版本更新
    IOS开发 二维码功能的实现
    级数
    算法-快速排序
    struts2.0中struts.xml配置文件详解【转】
    javascript原型【转】
    AOP各种的实现【转】
  • 原文地址:https://www.cnblogs.com/habibah-chang/p/12802652.html
Copyright © 2011-2022 走看看