Leecode 1254. 统计封闭岛屿的数目 DFS

news/2024/7/20 21:37:41 标签: 深度优先, leetcode, 算法, 深度优先遍历, c++

原题链接:Leecode 1254. 统计封闭岛屿的数目
这么简单一道题,又粗心,&&写成&&写成&&,我要吐了,浪费我两个小时找不出来错。。。
在这里插入图片描述
在这里插入图片描述
DFS

class Solution {
public:
    bool dfs(vector<vector<int>>& grid,int i,int j)
    {
        int m=grid.size(),n=grid[0].size();
        grid[i][j]=1;
        bool f=true;
        if(i==0 || i==m-1 || j==0 || j==n-1) f=false;
        if(i && !grid[i-1][j]) f=f & dfs(grid,i-1,j);
        if(i+1<m && !grid[i+1][j]) f=f & dfs(grid,i+1,j);
        if(j && !grid[i][j-1]) f=f & dfs(grid,i,j-1);
        if(j+1<n && !grid[i][j+1]) f=f & dfs(grid,i,j+1);
        return f;
    }
    int closedIsland(vector<vector<int>>& grid) {
        int m=grid.size(),n=grid[0].size();
        int res=0;
        for(int i=1;i<m-1;i++)
        {
            for(int j=1;j<n-1;j++)
            {
                if(grid[i][j]==0)
                {
                    if(dfs(grid,i,j)) res++;
                }
            }
        }
        return res;
    }
};

DFS(简洁一些)

class Solution {
public:
    int x[4]={-1,1,0,0};
    int y[4]={0,0,-1,1};
    bool dfs(vector<vector<int>>& grid,int i,int j)
    {
        int m=grid.size(),n=grid[0].size();
        bool f=true;
        if(i<0 || i>m-1 || j<0 || j>n-1 || grid[i][j]) return f;
        grid[i][j]=1;
        if(i==0 || i==m-1 || j==0 || j==n-1) f=false;
        for(int k=0;k<4;k++)
        {
            f&=dfs(grid,i+x[k],j+y[k]);
        }
        return f;
    }
    int closedIsland(vector<vector<int>>& grid) {
        int m=grid.size(),n=grid[0].size();
        int res=0;
        for(int i=1;i<m-1;i++)
        {
            for(int j=1;j<n-1;j++)
            {
                if(grid[i][j]==0)
                {
                    if(dfs(grid,i,j)) res++;
                }
            }
        }
        return res;
    }
};

BFS

class Solution {
public:
    int closedIsland(vector<vector<int>>& grid) {
        int m=grid.size(),n=grid[0].size();
        int res=0;
        for(int i=1;i<m-1;i++)
        {
            for(int j=1;j<n-1;j++)
            {
                if(grid[i][j]==0)
                {
                    grid[i][j]=1;
                    queue<pair<int,int>> q;
                    q.push({i,j});
                    bool f=true;
                    while(!q.empty())
                    {
                        auto node=q.front();
                        q.pop();
                        int x=node.first,y=node.second;
                        if(x==0 || x==m-1 || y==0 || y==n-1 ) f=false;
                        if(x && !grid[x-1][y]) 
                        {
                            q.push({x-1,y}); grid[x-1][y]=1;
                        } 
                        if(x+1<m && !grid[x+1][y])
                        {
                            q.push({x+1,y}); grid[x+1][y]=1;
                        }
                        if(y && !grid[x][y-1])
                        {
                            q.push({x,y-1}); grid[x][y-1]=1;
                        }
                        if(y+1<n && !grid[x][y+1])
                        {
                            q.push({x,y+1}) ; grid[x][y+1]=1;
                        }
                    }
                    if(f) res++;
                }
            }
        }
        return res;
    }
};

http://www.niftyadmin.cn/n/1264750.html

相关文章

Python3 filter() 函数

描述 filter() 函数用于过滤序列&#xff0c;过滤掉不符合条件的元素&#xff0c;返回一个迭代器对象&#xff0c;如果要转换为列表&#xff0c;可以使用 list() 来转换。 该接收两个参数&#xff0c;第一个为函数&#xff0c;第二个为序列&#xff0c;序列的每个元素作为参数…

Python 查看变量数据类型与数据格式

一般我们拿到一个数据&#xff0c;会先看一下这个数据有多少行多少列&#xff0c;各个字段是什么&#xff0c;数据格式类型是什么。在开始讲数据格式前&#xff0c;需要先梳理一下各个数据类型。我们常使用的库一般是numpy和pandas&#xff0c;Numpy下的核心是数组&#xff08;…

Leecode 1020. 飞地的数量 DFS/BFS

原题链接&#xff1a;Leecode 1020. 飞地的数量 DFS class Solution { public:int x[4]{-1,1,0,0};int y[4]{0,0,-1,1};int sum0;bool dfs(vector<vector<int>>& grid,int i,int j){int mgrid.size(),ngrid[0].size();bool ffalse;if(i<0 || i>m-1 ||…

python中日期型数据的处理方法

python中日期型数据的处理主要涉及到pandas中的.to_datetime方法和datetime库里边的datetime.strptime函数&#xff0c;前者一般最series进行操作&#xff0c;后者一般对具体的字符串进行操作。 一.datetime.strptime函数 用于将一个日期字符串转成datetime日期格式便于后期处…

用pandas_profiling生成数据报告遇到的各种坑

pandas_profiling可以实现自动的EDA,一键生成数据报告。 常见问题&#xff1a; 1.安装pandas_profiling报错。 2.内存和硬盘空间不够。 我的当前运行环境是Anaconda3-3.5.1&#xff0c;python版本问3.7.0. 在安装!pip3 install pandas_profiling时候提示需要先安装pip ins…

Leecode 130. 被围绕的区域 DFS

原题链接&#xff1a;Leecode 130. 被围绕的区域 DFS class Solution { public:int x[4]{-1,1,0,0};int y[4]{0,0,-1,1};void dfs(vector<vector<char>>& board,int i,int j){int mboard.size(),nboard[0].size();if(i<0 || i>m-1 || j<0 || j>…

Leecode 1094. 拼车 差分数组

原题链接&#xff1a;Leecode 1094. 拼车 class Solution { public:bool carPooling(vector<vector<int>>& trips, int capacity) {int ntrips.size();vector<int> sit(1001,0);int l,r,num;for(int i0;i<n;i){ltrips[i][1];rtrips[i][2];numtrips[…

Leecode 1109. 航班预订统计 差分

原题链接&#xff1a;Leecode 1109. 航班预订统计 1 class Solution { public:vector<int> corpFlightBookings(vector<vector<int>>& bookings, int n) {vector<int> res(n1,0);int l,r,num;for(int i0;i<bookings.size();i){lbookings[i][…