zoukankan      html  css  js  c++  java
  • [刷题] 200 Number of Islands

    要求

    • 给定一个二维数组,只有0和1两个字符,1代表陆地,0代表水域,纵向和横向的陆地连接成岛屿,被水域隔开,求出地图中有多少岛屿

    思路

    • 对要查找的区域进行双重循环遍历,寻找陆地
    • 从陆地初始点开始进行深度优先遍历
    • 如:从(0,0)开始深度遍历,填充岛屿,(0,1)已经访问过,(0,2)为水域,直到(2,2)再开始深度遍历

    实现

    • res:有多少个岛屿
    • 递归条件:在区域内,未被访问过,是陆地
    • 终止条件融入到了if语句中
     1 class Solution {
     2 
     3 private:
     4     int d[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};
     5     int m,n;
     6     vector<vector<bool>> visited;
     7     
     8     bool inArea( int x, int y){
     9         return x >= 0 && x < m && y >= 0 && y < n;
    10     }    
    11     
    12     // 从grid[x][y]开始,进行floodfill 
    13     // 保证(x,y)合法,且grid[x][y]是没有被访问过的陆地 
    14     void dfs( vector<vector<char>>& grid, int x, int y ){
    15         
    16         visited[x][y] = true;
    17         for( int i = 0 ; i < 4 ; i ++ ){
    18             int newx = x + d[i][0];
    19             int newy = y + d[i][1];
    20             // if语句保证访问合法,不需再写递归终止条件 
    21             if( inArea(newx, newy) && !visited[newx][newy] && grid[newx][newy] == '1')
    22                 dfs( grid, newx, newy );
    23         }
    24         return;
    25     }
    26     
    27 public:
    28     int numIslands(vector<vector<char>>& grid) {
    29         m = grid.size();
    30         if( m == 0 )
    31             return 0;
    32         n = grid[0].size();
    33         
    34         visited = vector<vector<bool>>(m, vector<bool>(n,false));
    35         
    36         int res = 0;
    37         for( int i = 0 ; i < m ; i ++ )
    38             for( int j = 0 ; j < n ; j ++ )
    39             if( grid[i][j] == '1' && !visited[i][j] ){
    40                 res ++;
    41                 dfs( grid, i, j );
    42             }
    43         return res;
    44     }
    45 };
    View Code

    相关

    • 130 Surrounded Regions
    • 417 Pacific Atlantic Water Flow
  • 相关阅读:
    你能用多长时间停车?
    中国威胁论好像还挺严重的
    热爱生命
    lunix下shell脚本批量获取文件,批量修改文件内容
    sql数据操作的若干心得(二)向表中自动插入自增的ID
    Asp.net开发之旅动态产生控件
    Asp.net开发之旅GridView中嵌入DropDownList的一点心得
    Asp.net开发之旅开发环境
    Asp.net开发之旅简单的引用母版页
    Sql数据操作的若干心得
  • 原文地址:https://www.cnblogs.com/cxc1357/p/12710920.html
Copyright © 2011-2022 走看看