LeetCode:1020. 飞地的数量

通过修改求岛屿数量的算法,仅需删除一行代码即可快速统计封闭岛屿内的土地数量。本篇介绍如何利用DFS深度优先搜索算法,排除边界影响,直接计算剩余土地块数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在完成了上一道题目的基础上 LeetCode:1254. 统计封闭岛屿的数目,我们只需要删去一行代码又可以完成这道题目了哈哈哈

前面的题都是问你求岛屿的数量,岛屿就是那些土地连在一起,一块一块的。而这道题问的是你土地的数量,同样的不包括边缘的土地

6efdcbea6b7c4c0d9d788f5e970a2744.png

那么这道题就很简单了,只要做了上道题,我们知道把整个图遍历的过程中就会把用不上的土地(边缘土地),和原本的海水都填成海水,那么当走到所求结果的土地时我们dfs,如果顺利那么计数器++,就说明这是一块岛屿。而这道题不问岛屿,问土地,那么久更简单了,我们走到结果土地的时候都不要dfs,只需要继续遍历看他有几块土地,计数器++就好,因为其他地方用不上的土地(边缘土地)在我们进行检查的时候都被填成海了

说到这里,估计就明白了,这道题的代码就是把上道题for循环的dfs删去就可以了

class Solution {
public:
 void DFS(vector<vector<int>>& grid,int i,int j )
    {
        if(i>=grid.size()||j>=grid[0].size()||i<0||j<0)
        {
            return ;
        }

        if(grid[i][j]==0)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);

    }
    int numEnclaves(vector<vector<int>>& grid) {
          int m=grid.size();
        int n=grid[0].size();
        for(int j=0;j<n;++j)
        {
            DFS(grid,0,j);//把最上边的岛给淹了
            DFS(grid,m-1,j);//最下面的淹了
        }
        for(int i=0;i<m;++i)
        {
            DFS(grid,i,0);//最左边的淹了
            DFS(grid,i,n-1);//最右边的给淹了
        }
        //这里上面的边缘土地,海水都被填成海水了
        //下面遍历求土地就行
        int count=0;
        for(int i=0;i<m;++i)
        {
            for(int j=0;j<n;++j)
            {
                if(grid[i][j]==1)
                {
                    count++;
                }
            }
        }
        return count;
    }
};

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BearPot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值