class Solution {
public:
//记忆化dfs
int m, n;
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, 1, -1};
int ans = 0;
int memo[205][205] = {0};
int dfs(int x, int y,vector<vector<int>>& matrix){
if(memo[x][y] != 0) return memo[x][y];
memo[x][y]++;
for(int i = 0; i < 4; i++){
int xx = dx[i] + x;
int yy = dy[i] + y;
if(xx < 0 || xx >= m || yy < 0 || yy >= n ||matrix[xx][yy] <= matrix[x][y]) continue;
memo[x][y] = max(memo[x][y], dfs(xx, yy, matrix) + 1);
}
return memo[x][y];
}
int longestIncreasingPath(vector<vector<int>>& matrix) {
m = matrix.size();
n = matrix[0].size();
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
ans = max(ans, dfs(i, j, matrix));
}
}
return ans;
}
};