题意:在矩阵中找最大递增路径。
思路:DFS。向可能的四个方向搜索,将返回的最大值 + 1作为该结点的值。
class Solution {
public:
vector<vector<int> > m;
int xx,yy;
vector<vector<int> > mmatrix;
int longestIncreasingPath(vector<vector<int>>& matrix) {
if(matrix.size() == 0) return 0;
mmatrix = matrix;
xx = matrix.size();
yy = matrix[0].size();
for(int i = 0; i < matrix.size(); ++ i) {
vector<int> in;
for(int j = 0; j < matrix[i].size(); ++ j) {
in.push_back(-1);
}
m.push_back(in);
}
int mmax = 0;
for(int i = 0; i < matrix.size(); ++ i) {
for(int j = 0; j < matrix[i].size(); ++ j) {
mmax = max(mmax, dfs(i, j));
}
}
return mmax;
}
int dfs(int x, int y) {
if(m[x][y] != -1) return m[x][y];
int u = 0;
int b = 0;
int r = 0;
int l = 0;
if(x - 1 >= 0 && mmatrix[x][y] > mmatrix[x - 1][y]) {
u = dfs(x - 1, y);
}
if(y - 1 >= 0 && mmatrix[x][y] > mmatrix[x][y - 1]) {
l = dfs(x, y - 1);
}
if(x + 1 < xx && mmatrix[x][y] > mmatrix[x + 1][y]) {
b = dfs(x + 1, y);
}
if(y + 1 < yy && mmatrix[x][y] > mmatrix[x][y + 1]) {
r = dfs(x, y + 1);
}
m[x][y] = max(max(u, b), max(r, l)) + 1;
return m[x][y];
}
};