题目链接
思路分析
题目中要求求解网格中岛屿中的数量,马么问题就在于如何判断是否是岛屿
- 从题目中可以看出,只要是连通的陆地就被视为是一块岛屿,因此题目被转化为求解多少陆地连在一起,可以采用深度优先搜索,为了防止被重复遍历, 将我们搜素过的陆地都置为0
代码实现
class Solution {
public:
void check(vector<vector<char>>& grid, int i, int j)
{
if(i < 0 || i >= grid.size() || j < 0 || j >=grid[0].size() || grid[i][j] != '1')
return ;
grid[i][j] = '0';
check(grid, i-1, j);
check(grid, i+1, j);
check(grid, i, j-1);
check(grid, i, j+1);
return ;
}
int numIslands(vector<vector<char>>& grid) {
int m = grid.size();
int n = grid[0].size();
int num = 0;
for(int i = 0; i < m; ++i)
{
for(int j = 0; j < n; ++j)
{
if(grid[i][j] == '1')
{
num++;
check(grid, i, j);
}
}
}
return num;
}
};