[LeetCode] Minimum Cost to Make at Least One Valid Path in a Grid

1368. Minimum Cost to Make at Least One Valid Path in a Grid

Given an m x n grid. Each cell of the grid has a sign pointing to the next cell you should visit if you are currently in this cell. The sign of grid[i][j] can be:

  • 1 which means go to the cell to the right. (i.e go from grid[i][j] to grid[i][j + 1])
  • 2 which means go to the cell to the left. (i.e go from grid[i][j] to grid[i][j - 1])
  • 3 which means go to the lower cell. (i.e go from grid[i][j] to grid[i + 1][j])
  • 4 which means go to the upper cell. (i.e go from grid[i][j] to grid[i - 1][j])

Notice that there could be some signs on the cells of the grid that point outside the grid.

You will initially start at the upper left cell (0, 0). A valid path in the grid is a path that starts from the upper left cell (0, 0) and ends at the bottom-right cell (m - 1, n - 1) following the signs on the grid. The valid path does not have to be the shortest.

You can modify the sign on a cell with cost = 1. You can modify the sign on a cell one time only.

Return the minimum cost to make the grid have at least one valid path.

  • Time : O(nlogn)
  • Space : O(n)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution {
vector<vector<int>> dp;
int dx[5] = {0,1,-1,0,0}, dy[5] = {0,0,0,1,-1};
int n, m;
int solution(vector<vector<int>>& grid, int y, int x) {
priority_queue<array<int,3>, vector<array<int,3>>, greater<array<int,3>>> q;
q.push({0,y,x});
while(!q.empty()) {
auto [c, cy, cx] = q.top(); q.pop();
if(cy == n-1 and cx == m-1) return c;
for(int i = 1; i < 5; i++) {
int ny = cy + dy[i], nx = cx + dx[i], nc = c + (i != grid[cy][cx]);
if(0<=ny and ny < n and 0 <= nx and nx < m and dp[ny][nx] > nc) {
dp[ny][nx] = nc;
q.push({nc,ny,nx});
}
}
}
return -1;
}
public:
int minCost(vector<vector<int>>& grid) {
n = grid.size(), m = grid[0].size();
dp = vector<vector<int>>(n, vector<int>(m, INT_MAX));
return solution(grid,0,0);
}
};
Author: Song Hayoung
Link: https://songhayoung.github.io/2022/02/16/PS/LeetCode/minimum-cost-to-make-at-least-one-valid-path-in-a-grid/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.