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

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

题目:
链接https://leetcode.cn/problems/longest-increasing-path-in-a-matrix/
dp力扣 329. 矩阵中的最长递增路径_第1张图片

代码:

class Solution {
public:
    struct node {
            int i;int j;int v;
        };
    static bool cmp(node x,node y){
        return x.v < y.v;
    }
    int dp[205][205];
    vector<node> ver;
    int longestIncreasingPath(vector<vector<int>>& matrix) {
        int n = matrix.size();
        int m= matrix[0].size();
        for(int i = 1 ; i <=n; i++)
            for(int j = 1; j <= m ; j++)
                ver.push_back({i,j,matrix[i-1][j-1]});
        sort(ver.begin(),ver.end(),cmp);
        int ans =0;
        for(int k = 0 ; k <ver.size(); k++){
            int i = ver[k].i;
            int j = ver[k].j;
            int v = ver[k].v;
                if(i>1&&matrix[i-2][j-1]>v)
                    dp[i-1][j]= max(dp[i-1][j],dp[i][j]+1);
                if(j>1&&matrix[i-1][j-2]>v)
                    dp[i][j-1] = max(dp[i][j-1],dp[i][j]+1);
                if(j<m&&matrix[i-1][j]>v)
                    dp[i][j+1]= max(dp[i][j+1],dp[i][j]+1);
                if(i<n&&matrix[i][j-1]>v)
                    dp[i+1][j] = max(dp[i+1][j],dp[i][j]+1);
        }
        for(int i = 1 ; i <=n; i++)
            for(int j = 1; j <= m ; j++)
                ans = max(ans,dp[i][j]);
        return ans+1;
    }
};

dp力扣 329. 矩阵中的最长递增路径_第2张图片

你可能感兴趣的:(dp力扣 329. 矩阵中的最长递增路径)