难度:中等。
标签:深度优先搜索,广度优先搜索,并查集,数组,矩阵。
使用深搜来完成,用2标记已经遍历过的位置。
正确解法:
class Solution {
void dfs(vector<vector<char>>& grid, int i, int j){
if(i < 0 || i >= grid.size() || j < 0 || j >= grid[0].size())return;
if(grid[i][j] == '2')return;
if(grid[i][j] == '0'){
grid[i][j] = '2';
return;
}
grid[i][j] = '2';
dfs(grid, i - 1, j);
dfs(grid, i + 1, j);
dfs(grid, i, j - 1);
dfs(grid, i, j + 1);
}
public:
int numIslands(vector<vector<char>>& grid) {
int m = grid.size(), n = grid[0].size();
int ans = 0;
for(int i = 0; i < m; ++i){
for(int j = 0; j < n; ++j){
if(grid[i][j] == '2')continue;
else if(grid[i][j] == '1'){
ans++;
dfs(grid, i, j);
}
}
}
return ans;
}
};
结果: