5
int dx[4] = {0, 0, 1, -1};6
int dy[4] = {1, -1, 0, 0};8
int minCost(vector<vector<int>> &grid) {10
int n = grid[0].size();12
priority_queue<vv, vector<vv>, greater<vv>> pq;14
vector<vector<int>> dp(m + 3, vector<int>(n + 3, INT_MAX));19
// there is no need of visited21
// distance or u can say cost relaxation31
if (i == m - 1 && j == n - 1) {35
for (int k = 0; k < 4; k++) {39
if (newi >= 0 && newj >= 0 && newi < m && newj < n) {40
if ((k + 1) == grid[i][j]) {41
if (dp[newi][newj] > cost) {42
dp[newi][newj] = cost;43
pq.push({cost, newi, newj});46
if (dp[newi][newj] > cost + 1) {47
dp[newi][newj] = cost + 1;48
pq.push({cost + 1, newi, newj});55
if (dp[m - 1][n - 1] != INT_MAX) {56
return dp[m - 1][n - 1];