class Solution {
public:
//记录四个方向
int dirs[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
int n, m;
//深度优先搜索,返回最大单元格数
int dfs(vector<vector<int> > &matrix, vector<vector<int> > &dp, int i, int j) {
if(dp[i][j] != 0)
return dp[i][j];
dp[i][j]++;
for(int k = 0; k < 4; k++){
int nexti = i + dirs[k][0];
int nextj = j + dirs[k][1];
//判断条件
if (nexti >= 0 && nexti < n && nextj >= 0 && nextj < m && matrix[nexti][nextj] > matrix[i][j])
dp[i][j] = max(dp[i][j], dfs(matrix, dp, nexti, nextj) + 1);
}
return dp[i][j];
}
int solve(vector<vector<int> >& matrix) {
//矩阵不为空
if(matrix.size() == 0 || matrix[0].size() == 0)
return 0;
int res = 0;
n = matrix.size();
m = matrix[0].size();
//i,j处的单元格拥有的最长递增路径
vector<vector<int> > dp (n, vector <int> (m));
for(int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
//更新最大值
res = max(res, dfs(matrix, dp, i, j));
return res;
}
};
// #include <vector>
// class Solution {
// public:
// /**
// * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
// *
// * 递增路径的最大长度
// * @param matrix int整型vector<vector<>> 描述矩阵的每个数
// * @return int整型
// */
// int ans=0;
// void dfs(vector<vector<int> >& matrix, vector<vector<int> > flag, int len, int i, int j)
// {
// int n=matrix.size();
// int m=matrix[i].size();
// flag[i][j] = 1;
// // 回溯的条件是什么呢?
// // 条件为:该点没有其它位置可走了
// if((i-1<0 || flag[i-1][j] || matrix[i-1][j]<matrix[i][j]) && (i+1>=n || flag[i+1][j] || matrix[i+1][j]<matrix[i][j]) && (j-1<0 || flag[i][j-1] || matrix[i][j-1]<matrix[i][j]) && (j+1>=m || flag[i][j+1] || matrix[i][j+1]<matrix[i][j]))
// {
// ans = max(ans,len);
// return;
// }
// if(i-1>=0 && matrix[i-1][j]>matrix[i][j] && !flag[i-1][j])
// dfs(matrix, flag, len+1, i-1, j);
// if(i+1<n && matrix[i+1][j]>matrix[i][j] && !flag[i+1][j])
// dfs(matrix, flag, len+1, i+1, j);
// if(j-1>=0 && matrix[i][j-1]>matrix[i][j] && !flag[i][j-1])
// dfs(matrix, flag, len+1, i, j-1);
// if(j+1<m && matrix[i][j+1]>matrix[i][j] && !flag[i][j+1])
// dfs(matrix, flag, len+1, i, j+1);
// }
// int solve(vector<vector<int> >& matrix) {
// // write code here
// int row=matrix.size();
// int col=matrix[0].size();
// // 判断位置是否已经遍历过
// vector<vector<int> > flag(row,vector<int>(col,0));
// for(int i=0; i<row; ++i)
// {
// for(int j=0; j<col; ++j)
// {
// dfs(matrix,flag,1,i,j);
// }
// }
// return ans;
// }
// };