码迷,mamicode.com
首页 > 其他好文 > 详细

[刷题] 200 Number of Islands

时间:2020-04-16 10:29:53      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:技术   实现   ide   mis   vat   click   col   idt   div   

要求

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

思路

  • 从初始点开始进行深度优先遍历
  • 从一点开始遍历,像洪水泛滥

技术图片

实现

技术图片
 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

[刷题] 200 Number of Islands

标签:技术   实现   ide   mis   vat   click   col   idt   div   

原文地址:https://www.cnblogs.com/cxc1357/p/12710920.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!