Hi community, I came across below leetcode problem:
URL: https://leetcode.com/problems/shortest-path-in-a-grid-with-obstacles-elimination/description/ Statement: You are given an m x n integer matrix grid where each cell is either 0 (empty) or 1 (obstacle). You can move up, down, left, or right from and to an empty cell in one step.
Return the minimum number of steps to walk from the upper left corner (0, 0) to the lower right corner (m — 1, n — 1) given that you can eliminate at most k obstacles. If it is not possible to find such walk return -1.
Below mentioned DFS solution is an AC for the problem My doubt: In my code I just made tiny changes: I called help() for cell at 0,0 instead of cell at grid.size()-1,grid[0].size()-1, and my code fails Note: In my code I updated the implementation (base case and manhattan optimization) of help() accordingly
Is the solution dependent on direction of dfs, or the test cases might have been weak ??
class Solution { public: int dp[42][42][1609]; const static int MAX = 1e7;
int shortestPath(vector<vector<int>>& grid, int k) {
return help(grid, grid.size() - 1, grid[0].size() - 1, k, k);
}
int help(vector<vector<int>>& grid, int x, int y, int z, int k){
//Reached destination
if(x == 0 && y == 0)return 0;
//Already visited/calculated
if(dp[x][y][z]) return dp[x][y][z];
//Cant remove any more obstacles
if(grid[x][y] == 1 && z == 0)return MAX;
//Manhattan optimization
if(z >= x + y)return dp[x][y][z] = x+y;
//Make sure to take direction left and up before right and top
vector<vector<int>> dirs = {{-1,0}, {0,-1}, {1,0}, {0,1}};
//Setting dp[x][y][z] to MAX so that it does not gets calculated again
dp[x][y][z] = MAX;
for(auto dir:dirs){
//DFS valid condition
if(x + dir[0] >= 0 && x + dir[0] < grid.size() && y + dir[1] >=0 && y + dir[1] < grid[0].size() ){
dp[x][y][z] = min(dp[x][y][z], help(grid, x + dir[0], y + dir[1], z - grid[x][y], k) + 1);
}
}
//If not possible
if(z == k && x == grid.size() - 1 && y == grid[0].size() - 1 && dp[x][y][z] == MAX)return -1;
return dp[x][y][z];
}
};



