给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
示例 1:
输入:grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"], ["0","0","0","0","0"] ] 输出:1
示例 2:
输入:grid = [ ["1","1","0","0","0"], ["1","1","0","0","0"], ["0","0","1","0","0"], ["0","0","0","1","1"] ] 输出:3
class Solution {
public:
int m;
int n;
void dfs_worker(vector<vector<char>>& grid,int r,int c)
{
grid[r][c]='0';
if(r-1>=0 && grid[r-1][c]=='1')
dfs_worker(grid,r-1,c);
if(r+1<m && grid[r+1][c]=='1')
dfs_worker(grid,r+1,c);
if(c-1>=0 && grid[r][c-1]=='1')
dfs_worker(grid,r,c-1);
if(c+1<n && grid[r][c+1]=='1')
dfs_worker(grid,r,c+1);
}
int numIslands(vector<vector<char>>& grid) {
m= grid.size();
if(m==0) return 0;
n= grid[0].size();
int cnt=0;
for(int i=0;i<m;++i)
{
for(int j=0;j<n;++j)
{
if(grid[i][j]=='1')
{
++cnt;
dfs_worker(grid,i,j);
}
}
}
return cnt;
}
};

721

被折叠的 条评论
为什么被折叠?



