[刷题] 200 Number of Islands
Posted cxc1357
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[刷题] 200 Number of Islands相关的知识,希望对你有一定的参考价值。
要求
- 给定一个二维数组,只有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 };
相关
- 130 Surrounded Regions
- 417 Pacific Atlantic Water Flow
以上是关于[刷题] 200 Number of Islands的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode刷题记录[java]——695 Max Area of Island
python 学习 leetcode ---number of island
[LeetCode] 694. Number of Distinct Islands