文章目录
题目
Leetcode 2290. 到达角落需要移除障碍物的最小数目
代码(9.17 首刷看解析)
class Solution {
public:
int dirs[4][2] = {
{
1, 0}, {
-1, 0}, {
0, 1}, {
0, -1}};
int minimumObstacles(vector<vector<int>>& grid) {
int m = grid.size(), n = grid[0].size();
vector<vector<int>> dis(m, vector<int>(n, INT_MAX));
dis[0][0] = grid[0][0];
deque<pair<int, int>> q;
q.emplace_back(0, 0);
while(!q.empty()) {
auto [x, y] = q.front();
q.pop_front();
for(auto& [dx, dy] : dirs) {
int nx = x + dx, ny = y + dy;
if(nx >= 0 && nx < m && ny >= 0 && ny < n) {
if(dis[x][y] + grid[nx][ny] < dis[nx][ny]) {
dis[nx][ny] = dis[x][y] + grid[nx][ny];
grid[nx][ny] == 0 ? q.emplace_front(nx, ny) : q.emplace_back(nx, ny);
}
}
}
}
return dis[m-1][n-1];
}
};