Leetcode 200.岛屿问题做题记录:统计岛屿的数量。
这类岛屿问题的重点在于网格类DFS框架的使用,其中边界判断和搜索过程中避免重复遍历尤为重要,做好这两点可以使代码更加简洁高效。
为了避免搜索重复遍历,我们需要将遍历过的节点进行标记,此题的方法是遍历过一个节点之后将该节点grid的值改为0。
具体解题代码如下:
class Solution {
public:
void dfs(vector<vector<char>> &grid, int i, int j) {
int row = grid.size(), col = grid[0].size();
grid[i][j] = '0';
if(i-1>=0 && grid[i-1][j] == '1') dfs(grid, i-1, j);
if(i+1<row && grid[i+1][j] == '1') dfs(grid, i+1, j);
if(j-1>=0 && grid[i][j-1] == '1') dfs(grid, i, j-1);
if(j+1<col && grid[i][j+1] == '1') dfs(grid, i, j+1);
}
int numIslands(vector<vector<char>>& grid) {
int row = grid.size(), col = grid[0].size();
int num_island = 0;
for(int i=0; i<row; i++) {
for(int j=0; j<col; j++) {
if(grid[i][j] == '1') {
num_island ++;
dfs(grid, i, j);
}
}
}
return num_island;
}
};