记忆化深度优先搜索
class Solution {
public:
vector<vector<int>> direction{{1,0},{-1,0},{0,1},{0,-1}};
int m,n;
int longestIncreasingPath(vector<vector<int>>& matrix) {
if(matrix.empty()) return 0;
m=matrix.size();n=matrix[0].size();
vector<vector<int>> cache(m,vector<int>(n));
int res = 0;
for(int i=0;i<m;++i)
for(int j=0;j<n;++j)
res = max(res,dfs(matrix,i,j,cache));
return res;
}
int dfs(vector<vector<int>>& matrix,int x, int y, vector<vector<int>>& cache){
if(cache[x][y]) return cache[x][y];
for(auto d:direction){
int x1=x+d[0],y1=y+d[1];
if(x1>=0 && x1<m && y1>=0 && y1<n && matrix[x1][y1]>matrix[x][y])
cache[x][y] = max(cache[x][y],dfs(matrix,x1,y1,cache));
}
return ++cache[x][y];
}
};