力扣 2290. 到达角落需要移除障碍物的最小数目

该文章介绍了一种使用广度优先搜索(BFS)策略来解决矩阵问题的方法,目标是找到从左上角到右下角移除最少障碍物(1表示障碍)的路径。通过将0和1视为不同代价并调整队列顺序,确保计算出的代价始终是最小的。这是一个典型的01BFS问题,适用于解决类似路径规划挑战。
摘要由CSDN通过智能技术生成

题意

给定一个矩阵,0代表空地,1代表障碍物,要求移除最少的障碍物使可以从左上角走到右下角

思路

BFS,将0和1看作走过格子的代价,相当于走到右下角用的最少代价。走到1的格子放到队列最后,0的放到最前,这样对于一个格子走到他所计算的代价一定是最小的。

说是01BFS的模板题,我怎么以前没听过这个算法哈哈哈哈,是题刷少了吗

class Solution {
public:
    struct node{
        int x,y;
    };
    int dir[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
    int minimumObstacles(vector<vector<int>>& grid) {
        int n=grid.size();
        int m=grid[0].size();
        vector<vector<int>> dis(n, vector<int>(m, INT_MAX));
        deque<node>q;
        q.push_front(node{0,0});
        dis[0][0]=0;
        while(q.size()) {
            auto u = q.front();
            q.pop_front();
            int x=u.x;
            int y=u.y;
            for(int i=0;i<4;i++) {
                int tx = x+dir[i][0];
                int ty = y+dir[i][1];
                if(tx>=0&&ty>=0&&tx<n&&ty<m&&dis[tx][ty]==INT_MAX) {
                    dis[tx][ty] = dis[x][y]+grid[tx][ty];
                    if(grid[tx][ty]) q.push_back(node{tx,ty});
                    else q.push_front(node{tx,ty});
                }
            }
        }
        return dis[n-1][m-1];
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值