Description:
题目大意:给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。
解题思路:
算法标签:dfs
利用dfs求连通块。
代码:
class Solution {
public:
int xx[4] = {-1,1,0,0};
int yy[4] = {0,0,-1,1};
void dfs(vector<vector<char>>& grid , int x,int y , int m,int n) {
if(x < 0 || y < 0 || x >= m || y >= n || grid[x][y] == '0')
return;
grid[x][y] = '0';
for(int i = 0;i < 4;i++) {
int temp_x = x + xx[i];
int temp_y = y + yy[i];
dfs(grid,temp_x,temp_y,m,n);
}
}
int numIslands(vector<vector<char>>& grid) {
int ans = 0;
if(grid.size() == 0)
return 0;
int m = grid.size();
int n = grid[0].size();
for(int i = 0;i < m;i++)
for(int j = 0;j < n;j++) {
if(grid[i][j] == '1') {
dfs(grid,i,j,m,n);
ans++;
}
}
return ans;
}
};