Advertisement
anuragpal_47

Untitled

May 10th, 2024
707
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.34 KB | Source Code | 0 0
  1. class Solution {
  2. public:
  3.     bool issafe(vector<vector<int>>& matrix, int i, int j) {
  4.         return (i >= 0 && i < matrix.size() && j >= 0 && j < matrix[0].size() && matrix[i][j] == 0);
  5.     }
  6.    
  7.     void solve(vector<vector<int>>& matrix, int i, int j, vector<vector<int>>& memo, int lencount, int& min_len) {
  8.         if (i == matrix.size() - 1 && j == matrix[0].size() - 1) {
  9.             min_len = min(min_len, lencount);
  10.             return;
  11.         }
  12.         if (memo[i][j] != -1 && lencount >= memo[i][j]) {
  13.             return;
  14.         }
  15.         memo[i][j] = lencount;
  16.        
  17.         vector<pair<int,int>> dir = {{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
  18.        
  19.         for (int k = 0; k < 8; k++) {
  20.             int r = i + dir[k].first;
  21.             int c = j + dir[k].second;
  22.            
  23.             if (issafe(matrix, r, c)) {
  24.                 solve(matrix, r, c, memo, lencount + 1, min_len);
  25.             }
  26.         }
  27.     }
  28.    
  29.     int shortestPathBinaryMatrix(vector<vector<int>>& grid) {
  30.         if (grid[0][0] == 1 || grid[grid.size()-1][grid[0].size()-1] == 1) return -1;
  31.         vector<vector<int>> memo(grid.size(), vector<int>(grid[0].size(), -1));
  32.         int min_len = INT_MAX;
  33.         solve(grid, 0, 0, memo, 1, min_len);
  34.         if (min_len == INT_MAX) return -1;
  35.         return min_len;
  36.     }
  37. };
  38.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement