LeetCode 200.岛屿数量 - C++ - 深度优先搜索(DFS)

岛屿数量

岛屿数量又来了,大多数情况下,能用 BFS 解决的问题,也能被 DFS 解决。问题具体见。岛屿问题

代码如下(C++):

class Solution {
  private:
  void dfs(vector<vector<char>> & grid,int r,int c){    // 深度优先算法,感觉就是个递归
    int nr = grid.size();   // 岛屿大小
    int nc = grid[0].size();

    grid[r][c] = '0';       // 将当前位置置0
    if(r-1 >=0 && grid[r-1][c] == '1') dfs(grid,r-1,c); // 判断上下左右,如果有的话,继续递归
    if(r+1 <nr && grid[r+1][c] == '1') dfs(grid,r+1,c);
    if(c-1 >=0 && grid[r][c-1] == '1') dfs(grid,r,c-1);
    if(c+1 <nc && grid[r][c+1] == '1') dfs(grid,r,c+1);
  }
public:
  int numIslands(vector<vector<char>>& grid) {
    int nr = grid.size();
    if(!nr) return 0;
    int nc = grid[0].size();

    int num_island = 0;

    for(int r = 0; r < nr; ++r){
      for(int c = 0; c < nc; ++c){
        if(grid[r][c] == '1'){
          ++num_island;     // 如果遇到 1 就 +1
          dfs(grid,r,c);    // 然后递归就完了
        }
      }
    }
    return num_island;
  }
};

放在最后

如果您喜欢我的文章,拜托点赞+收藏+关注,博主会根据大家喜好来推出相关系列文章~

更多精彩内容也可以访问我的博客Aelous-BLog

猜你喜欢

转载自blog.csdn.net/Aelous_dp/article/details/107700095