Advertisement
Guest User

Untitled

a guest
Nov 17th, 2019
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.33 KB | None | 0 0
  1. class Solution {
  2.     std::vector<std::vector<int>> longPath;
  3.     int maxi;
  4.     int m, n;
  5.     int DFS(vector<vector<int>>& matrix, int row, int col, int prev) {
  6.         if (row<0||col<0||row>=m||col>=n) {
  7.             return 0;
  8.         }
  9.         if (matrix[row][col]>prev) {
  10.             if (longPath[row][col]>=0)
  11.                 return longPath[row][col];
  12.  
  13.             longPath[row][col] = 1+std::max({DFS(matrix, row+1, col, matrix[row][col]),
  14.             DFS(matrix, row-1, col, matrix[row][col]),
  15.             DFS(matrix, row, col+1, matrix[row][col]),
  16.             DFS(matrix, row, col-1, matrix[row][col])});
  17.             return longPath[row][col];
  18.         }
  19.         else
  20.             return 0;
  21.     }
  22. public:
  23.     int longestIncreasingPath(vector<vector<int>>& matrix) {
  24.         if (matrix.empty())
  25.             return 0;
  26.         m = matrix.size();
  27.         n = matrix[0].size();
  28.         maxi = 0;
  29.         longPath = std::vector<std::vector<int>> (m, std::vector<int>(n,-1));
  30.        
  31.         for (int ii=0; ii<m; ++ii) {
  32.             for (int jj=0; jj<n; ++jj) {
  33.                 if (longPath[ii][jj]==-1) {
  34.                     DFS(matrix, ii, jj, std::numeric_limits<int>::min());
  35.                 }
  36.                 maxi = maxi<longPath[ii][jj]?longPath[ii][jj]:maxi;
  37.             }
  38.         }
  39.         return maxi;
  40.     }
  41. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement