给定一个由 '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 };