TOP101题解 | BM61#矩阵最长递增路径#

矩阵最长递增路径

https://www.nowcoder.com/practice/7a71a88cdf294ce6bdf54c899be967a2

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * @author Senky
 * @date 2023.08.24
 * @par url https://www.nowcoder.com/creation/manager/content/584337070?type=column&status=-1
 * @param matrix int整型二维数组 描述矩阵的每个数
 * @param matrixRowLen int matrix数组行数
 * @param matrixColLen int* matrix数组列数
 * @return int整型
 */
#include <math.h>
#include <stdlib.h>
int DFS(int** matrix, int matrixRowLen, int* matrixColLen, int row, int column, int **dp)
{

    if(dp[row][column] != 0)
    {
        return dp[row][column];
    }

    int direction[4][2] = {{1, 0}, {-1, 0}, {0, -1}, {0, 1}};/*上,下,左,右*/
    int max_len = 1;/*最大长度,初始化为1*/

    for(int d = 0; d < 4; d++)
    {
        int new_i = row + direction[d][0];
        int new_j = column + direction[d][1];

        if (new_i >= 0 && new_i < matrixRowLen && new_j >= 0 && new_j < matrixColLen[new_i] && matrix[row][column] < matrix[new_i][new_j]) 
        {
            int path_len = 1 + DFS(matrix, matrixRowLen, matrixColLen, new_i, new_j, dp);
            max_len = fmax(max_len, path_len);
        }
    }
    
    dp[row][column] = max_len;
    
    return max_len;
}

int solve(int** matrix, int matrixRowLen, int* matrixColLen ) 
{
    // write code here
    if(matrix == NULL || matrixRowLen == 0 || *matrixColLen == 0)
    {
        return 0;
    }

    int max_path_len = 0;/*最大路径长度*/
    int ** dp = (int**)malloc(matrixRowLen * sizeof(int*));/*dp数组,大小同等于matrix*/

    for(int i = 0; i < matrixRowLen; i++)
    {
        dp[i] = (int*)calloc(matrixColLen[i], sizeof(int)); /*初始化为0*/
    }
    
    for(int i = 0; i < matrixRowLen; i++)
    {
        for(int j = 0; j < matrixColLen[i]; j++)
        {
            /*遍历每一个元素,将每一个元素作为起点时的路径长度返回*/
            int path_len = DFS(matrix, matrixRowLen, matrixColLen, i , j, dp);

            /*每次都只记录最大的那个路径长度*/
            max_path_len = fmax(max_path_len, path_len);
        }
    }

    for (int i = 0; i < matrixRowLen; i++) 
    {
        free(dp[i]);
    }
    free(dp);
    
    return max_path_len;

}

#TOP101#
TOP101-BM系列 文章被收录于专栏

系列的题解

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务