LeetCode 200. 岛屿的个数

给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。

示例 1:

输入:
11110
11010
11000
00000

输出: 1

示例 2:

输入:
11000
11000
00100
00011

输出: 3
 1 class Solution {
 2 public:
 3     int n,m;
 4     int numIslands(vector<vector<char>>& grid) {
 5         if(grid.empty() || grid[0].empty()) return 0;
 6         vector<pair<int,int>> directs={{-1,0},{1,0},{0,1},{0,-1}};
 7         m=grid.size();
 8         n=grid[0].size();
 9         vector<vector<bool> > visited(m,vector<bool>(n,false));
10         int res=0;
11         for(int i=0;i<m;i++){
12             for(int j=0;j<n;j++){
13                 if(!visited[i][j] && grid[i][j]=='1') {
14                     helper(grid,visited,directs,i,j);
15                     res++;
16                 }
17             }
18         }
19         return res;
20     }
21     void helper(vector<vector<char> >& grid,vector<vector<bool> >& visited,vector<pair<int,int> >& directs,int i,int j){
22         if(i<0 || j<0 || i>=m || j>=n || visited[i][j] || grid[i][j]=='0') return;
23         visited[i][j]=true;
24         for(auto direct:directs){
25             helper(grid,visited,directs,i+direct.first,j+direct.second);
26         }
27     }
28 };
原文地址:https://www.cnblogs.com/Jawen/p/10872593.html