329. 矩阵中的最长递增路径

329. 矩阵中的最长递增路径

思路

从每个点下去dfs。然后对于每个点都进行dfs,并且memo记录的是当前点到终点的最大步数。

cpp 复制代码
class Solution {
public:
    static constexpr int dirs[4][2] = {{0,1},{0,-1},{1, 0},{-1,0}};  
    int longestIncreasingPath(vector<vector<int>>& matrix) {
        int n = matrix.size();
        int m = matrix[0].size();
        if(n == 0 or m == 0) return 0;
        vector<vector<int>> memo(n , vector<int>(m, 0));
        int ans = 0;
        // 从每一个点深入去看。
        for(int i=0;i<n;i++){
            for(int j =0 ;j<m;j++){
                ans = max(ans, dfs(i,j,memo, matrix));
            }
        }
        return ans;
    }
    int dfs(int x, int y, vector<vector<int>>& memo, const vector<vector<int>>& mat){
        // 如果这个x,y这个点有值了说明这个点到终点(最高点)走了多少步
        if(memo[x][y]!=0) return memo[x][y];
        int n = mat.size();
        int m = mat[0].size();
        ++memo[x][y];
        // 从这个点看四周。
        for(int k = 0;k<4;k++){
            int new_x = x+dirs[k][0];
            int new_y = y+dirs[k][1];
            if(new_x>=0 and new_x<n and new_y>=0 and new_y<m and mat[new_x][new_y]>mat[x][y]){
                memo[x][y] = max(memo[x][y], dfs(new_x, new_y, memo, mat)+1);
            }
        }
        
        return memo[x][y];
    }


};
相关推荐
写个博客1 小时前
代码随想录算法训练营第五十三天
算法
1白天的黑夜12 小时前
动态规划-152.乘积最大子数组-力扣(LeetCode)
c++·算法·leetcode·动态规划
apcipot_rain2 小时前
【应用密码学】实验七 Hash函数——SM3
算法·哈希算法
?!7142 小时前
网络编程之网络编程预备知识
linux·网络·c++
理论最高的吻3 小时前
1614. 括号的最大嵌套深度【 力扣(LeetCode) 】
c++·算法·leetcode·职场和发展·字符串··字符匹配
遇见你的雩风3 小时前
LeetCode 118 题解--杨辉三角
java·算法·leetcode·职场和发展
远瞻。3 小时前
【论文精读】2024 CVPR--Upscale-A-Video现实世界视频超分辨率(RealWorld VSR)
论文阅读·人工智能·算法·stable diffusion·音视频·超分辨率重建
Daking-4 小时前
「动态规划::状压DP」网格图递推 / AcWing 292|327(C++)
c++·算法·动态规划
hjjdebug4 小时前
c/c++怎样编写可变参数函数.
c++·args...·可变参数函数
mozun20204 小时前
YOLOX 的动态标签分类(如 SimOTA)与 Anchor-free 机制解析2025.5.29
人工智能·算法·yolo·目标检测·计算机视觉·分类·数据挖掘