利用DFS解决力扣200题:Number of Islands岛屿数量

本文解析了一个关于计算二维格子里岛屿数量的问题,利用深度优先搜索策略,通过遍历并标记连通区域来找出所有独立的陆地区域。通过实例和代码实现展示了如何解决此问题,适用于计算机科学和图形算法的学习者。

题目:

  给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。

示例1:

输入:

11110

11010

11000

00000

输出: 1

示例2:

输入:

11000

11000

00100

00011

输出:3

解释:每座岛屿只能由水平和/或竖直方向上相邻的陆地链接而成。

自己对题目的分析和理解:

该题求是所有岛屿的数量看似是求最小值,实际上仍然是当遍历到某一个岛屿时,求出包含它的最大区域,使得区域内全是相连的岛屿。求给的二维网格图中,连通分量的总数,那么就依次遍历二维数组中的每一个点,凡是值为1且未被访问过的点,都进行依次深度优先遍历,求出这个点对应的连通分量,然后将这个分量中的点都设置为已被访问,然后岛屿数量加一,继续进行遍历。直到所有的点都遍历完全,最后就可以求出总的岛屿数量。

总结:遍历网格中的所有点,如果值为1,则岛屿数量+1,进行深度优先搜索。

最后奉上DFS代码(参考):

 class Solution {
  public:
      int ans=0;
      int numIslands(vector<vector<char>>& grid) {
          if(grid.size()==0)
              return 0;
          for(int i=0;i<grid.size();i++){
              for(int j=0;j<grid[0].size();j++){
                 if(grid[i][j]=='1'){
                     dfs(grid,i,j);
                     ans++;
                 }
             }
         }
         return ans;
     }

     void dfs(vector<vector<char>>& grid,int i,int j){
         if(i<0||j<0||i>=grid.size()||j>=grid[0].size()||grid[i][j]!='1')    
             return ;
         grid[i][j]='0';
         dfs(grid,i+1,j);
         dfs(grid,i-1,j);
        dfs(grid,i,j+1);
         dfs(grid,i,j-1);
         return ;
     }
  };

数媒202潘zy 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值