类似LeetCode第 130 题:被围绕的区域(C++)_zj-CSDN博客
dfs
要向四个方向遍历,一开始以为三个方向就可以,后来才发现可能需要向上的
class Solution {
public:
int res = 0;
int numIslands(vector<vector<char>>& grid) {
if(grid.empty()) return res;
int n = grid.size(), m = grid[0].size();
for(int i = 0; i < n; ++i){
for(int j = 0; j < m; ++j){
if(grid[i][j] == '1'){
++res;
dfs(grid, i, j);
}
}
}
return res;
}
//四个方向遍历,把与x, y相连的1全部标记为-1
void dfs(vector<vector<char>> &grid, int x, int y){
if(x < 0 || x >= grid.size() || y < 0 || y >= grid[0].size() || grid[x][y] != '1') return;
grid[x][y] = -1;
dfs(grid, x+1, y);//向下
dfs(grid, x, y+1);//向右
dfs(grid, x, y-1);//向左
dfs(grid, x-1, y);//向上
}
};
同样一遍遍历一遍修改,bfs也是一样的