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; // } // };