这里访问过的结点就不会再访问,不满足大小关系!!一开始还傻乎乎使用visited记录访问过的结点
然后每次递归,终止条件是没法再向四周移动,每一层向上一层返回当前能够前进的最大长度
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 递增路径的最大长度
* @param matrix int整型vector<vector<>> 描述矩阵的每个数
* @return int整型
*/
// 走过的结点不会再走,因为不满足大小关系了,无需使用visited数组记录
int solve(vector<vector<int> >& matrix) {
int res = 1;
int count = 0;
int size = matrix.size();
// std::vector<std::vector<int>> dp(size, std::vector<int>(size, 0));
// 不需要dp,每次每个结点只返回最大路径长度,各节点之间的最大路径长度没关联
for (int i = 0; i < size; ++i) {
for (int j = 0; j < size; ++j) {
count = 0;
res = std::max(res, recursion(matrix, size, i, j, count));
}
}
return res;
}
private:
// 返回给上一层当前的最大长度
int recursion(std::vector<std::vector<int>> &matrix, const int &size, int i, int j, int &count) {
// 上下左右
int len = 0;
if (i > 0 && matrix[i - 1][j] > matrix[i][j]) {
len = std::max(len, recursion(matrix, size, i - 1, j, count));
}
if (i < size - 1 && matrix[i + 1][j] > matrix[i][j]) {
len = std::max(len, recursion(matrix, size, i + 1, j, count));
}
if (j > 0 && matrix[i][j - 1] > matrix[i][j]) {
len = std::max(len, recursion(matrix, size, i, j - 1, count));
}
if (j < size - 1 && matrix[i][j + 1] > matrix[i][j]) {
len = std::max(len, recursion(matrix, size, i, j + 1, count));
}
count = len + 1;
return count;
}
};