DFS问题,遍历每个点并且取其最大值;在遍历过程中应该,避免重复遍历,应该设置path[2][4]为每个点为起始点的最长路径长度,初始化为0,如果被遍历过不为0,则返回,否则进行遍历。
class Solution {
public:
int longestIncreasingPath(vector<vector<int>>& matrix) {
int maxway=0;
int m=matrix.size();
if(m==0) return 0;
int n=matrix[0].size();
vector<vector<int>> way(m, vector<int>(n, 0));
int path[2][4]={{0,1,0,-1},{1,0,-1,0}};
for(int i=0;i<m;i++)
for(int j=0;j<n;j++){
maxway=max(maxway,dfs(i,j,matrix,way,n,m,path));
}
return maxway;
}
int dfs(int x,int y,vector<vector<int>>& matrix,vector<vector<int>>& way,int n,int m,int path[][4] ){
int lx,ly;
if(way[x][y])
return way[x][y];
for(int i=0;i<4;i++){
lx=x+path[0][i];
ly=y+path[1][i];
if(lx<m&&ly<n&&lx>=0&&ly>=0&&matrix[x][y]<matrix[lx][ly])
way[x][y]=max(way[x][y],dfs(lx,ly,matrix,way,n,m,path));
}
return ++way[x][y];
}
};