BM61 矩阵最长递增路径(描述给定一个 n 行 m 列矩阵 matrix ,矩阵内所有数均为非负整数。 你需要在矩阵中找到一条最长路径,使这条路径上的元素是递增的。并输出这条最长路径的长度。

/*
描述
给定一个 n 行 m 列矩阵 matrix ,矩阵内所有数均为非负整数。 你需要在矩阵中找到一条最长路径,使这条路径上的元素是递增的。并输出这条最长路径的长度。
这个路径必须满足以下条件:

1. 对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外。
2. 你不能走重复的单元格。即每个格子最多只能走一次。
带备忘录的递归,
*/

int dfs(vector > &matrix,int x,int y,int last_num,vector > &dp)
    {
        if(last_num >= matrix[x][y])
            return 0;
        if(dp[x][y] != -1)
            return dp[x][y];
        int num = 0;
        if(x + 1 < matrix.size())
            num = max(num,dfs(matrix,x + 1,y,matrix[x][y],dp));
        
        if(x - 1 >= 0)
            num = max(num,dfs(matrix,x - 1,y,matrix[x][y],dp));
        
        if(y - 1 >= 0)
            num = max(num,dfs(matrix,x,y - 1,matrix[x][y],dp));
        
        if(y + 1 < matrix[0].size())
            num = max(num,dfs(matrix,x,y + 1,matrix[x][y],dp));
        dp[x][y] = num + 1;
        return num + 1;
    }
    int solve(vector >& matrix) {
        // write code here
        int n=matrix.size();
        int m=matrix[0].size();
        // 特判矩阵为空的情况
        if(n==0){
            return 0;
        }
        vector > dp(n,vector(m,-1));
        int ans=0;
//        int m=matrix[0].size();
        for(int i=0;i

你可能感兴趣的:(算法)