前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【算法刷题指南】多源BFS问题

【算法刷题指南】多源BFS问题

作者头像
南桥
发布2024-12-22 16:52:41
发布2024-12-22 16:52:41
8000
代码可运行
举报
文章被收录于专栏:南桥谈编程南桥谈编程
运行总次数:0
代码可运行

542.01矩阵

542.01矩阵

代码语言:javascript
代码运行次数:0
复制
class Solution {
    int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
    typedef pair<int,int> PII;
public:
    vector<vector<int>> updateMatrix(vector<vector<int>>& mat) {
        int m=mat.size(),n=mat[0].size();
        vector<vector<int>> ans(m,vector<int>(n,-1));
        queue<PII> q;
        for(int i=0;i<m;i++)
            for(int j=0;j<n;j++)
                if(mat[i][j]==0) 
                {
                    q.push({i,j});
                    ans[i][j]=0;
                }
        while(q.size())
        {
            auto [a,b]=q.front();
            q.pop();
            for(int i=0;i<4;i++)
            {
                int x=a+dx[i],y=b+dy[i];
                if(x>=0&&x<m&&y>=0&&y<n&&ans[x][y]==-1)
                {
                    ans[x][y]=ans[a][b]+1;
                    q.push({x,y});
                }
            }
        }
        return ans;
    }
};

1020.飞地的数量

1020.飞地的数量

代码语言:javascript
代码运行次数:0
复制
class Solution {
    typedef pair<int,int> PII;
    int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
    bool vis[505][505];
public:
    int numEnclaves(vector<vector<int>>& grid) {
        int m=grid.size(),n=grid[0].size();
        queue<PII> q;
        for(int i=0;i<m;i++)
            for(int j=0;j<n;j++)
                if(i==0||i==m-1||j==0||j==n-1)
                {
                    if(grid[i][j]==1)
                    {
                        q.push({i,j});
                        vis[i][j]=1;
                    }
                }
        while(q.size())
        {
            auto [a,b]=q.front();
            q.pop();
            for(int i=0;i<4;i++)
            {
                int x=a+dx[i],y=b+dy[i];
                if(x>=0&&x<m&&y>=0&&y<n&&grid[x][y]==1&&!vis[x][y])
                {
                    q.push({x,y});
                    vis[x][y]=1;
                }
            }
        }
        int ans;
        for(int i=0;i<m;i++)
            for(int j=0;j<n;j++)
            {
                if(grid[i][j]==1&&!vis[i][j]) ans++;
            }
        return ans;
    }
};

1765.地图中的最高点

1765.地图中的最高点

代码语言:javascript
代码运行次数:0
复制
class Solution {
    typedef pair<int,int> PII;
    int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
public:
    vector<vector<int>> highestPeak(vector<vector<int>>& isWater) {
        int m=isWater.size(),n=isWater[0].size();
        vector<vector<int>> hegith(m,vector<int>(n,-1));
        queue<PII> q;
        for(int i=0;i<m;i++)
            for(int j=0;j<n;j++)
                if(isWater[i][j]==1) 
                {
                    q.push({i,j});
                    hegith[i][j]=0;
                }
        while(q.size())
        {
            auto [a,b]=q.front();q.pop();
            for(int i=0;i<4;i++)
            {
                int x=a+dx[i],y=b+dy[i];
                if(x>=0&&x<m&&y>=0&&y<n&&hegith[x][y]==-1)
                {
                    q.push({x,y});
                    hegith[x][y]=hegith[a][b]+1;
                }
            }
        }
        return hegith;
    }
};

1162.地图分析

1162.地图分析

代码语言:javascript
代码运行次数:0
复制
class Solution {
    typedef pair<int,int> PII;
    int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
public:
    int maxDistance(vector<vector<int>>& grid) {
        int m=grid.size(),n=grid[0].size();
        vector<vector<int>> dist(m,vector<int>(n,-1));
        queue<PII> q;
        for(int i=0;i<m;i++)
            for(int j=0;j<n;j++)
                if(grid[i][j]==1)
                {
                    q.push({i,j});
                    dist[i][j]=0;
                }
        int ans=-1;
        while(q.size())
        {
            auto [a,b]=q.front();q.pop();
            for(int i=0;i<4;i++)
            {
                int x=a+dx[i],y=b+dy[i];
                if(x>=0&&x<m&&y>=0&&y<n&&dist[x][y]==-1)
                {
                    q.push({x,y});
                    dist[x][y]=dist[a][b]+1;
                    ans=max(ans,dist[x][y]);
                }
            }
        }
        return ans;
    }
};

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 542.01矩阵
  • 1020.飞地的数量
  • 1765.地图中的最高点
  • 1162.地图分析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档