zoukankan      html  css  js  c++  java
  • 329. 矩阵中的最长递增路径

    给定一个整数矩阵,找出最长递增路径的长度。

    对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。

    示例 1:输入: nums = 

    [[9,9,4],
    [6,6,8],
    [2,1,1]]
    输出: 4
    解释: 最长递增路径为 [1, 2, 6, 9]。


    示例 2:输入:nums = 

    [[3,4,5],
    [3,2,6],
    [2,2,1]]
    输出: 4 解释: 最长递增路径是 [3, 4, 5, 6]。注意不允许在对角线方向上移动。

    解题思路:memo[i][j] 表示从[i,j]开始的最长递增路径的长度.

    dfs 返回值 也是该点开始的最长递增路径的长度,显然,当前点的最长路径 = 能走到的下个点的最长路径 + 1
    在dfs函数中,tmp变量初始化为1,表示从该点开始,未向外扩展时,长度为1.

    int dict[4][2] = {
        {-1, 0},
        {0, -1},
        {1, 0},
        {0, 1}
    };
    
    int dfs(int **matrix, int **memo, int row, int col, int i, int j)
    {
        if (memo[i][j])
            return memo[i][j];
    
        int tmp = 1;
        for (int k = 0; k < 4; k++) {
            int x = i + dict[k][0];
            int y = j + dict[k][1];
            if (x >= 0 && x < row && y >= 0 && y < col && matrix[x][y] > matrix[i][j]) {
                tmp = fmax(tmp, dfs(matrix, memo, row, col, x, y) + 1);
            }
        }
        memo[i][j] = tmp;
        return memo[i][j];
    }
    
    int longestIncreasingPath(int** matrix, int matrixSize, int* matrixColSize){
        if (matrix == NULL) {
            return 0;
        }
        
        int **memo = (int **)malloc(matrixSize * sizeof(int *));
        for (int i = 0; i < matrixSize; i++) {
            memo[i] = (int *)calloc(matrixColSize[0], sizeof(int));
        }
        
        int res = 0;
        for (int i = 0; i < matrixSize; i++) {
            for (int j = 0; j < matrixColSize[0]; j++) {
                res = fmax(res, dfs(matrix, memo, matrixSize, matrixColSize[0], i, j));
            }
        }
        
        for (int i = 0; i < matrixSize; i++) {
            free(memo[i]);
        }
        free(memo);
        return res;
    }
  • 相关阅读:
    UVALive 7141 BombX
    CodeForces 722D Generating Sets
    CodeForces 722C Destroying Array
    CodeForces 721D Maxim and Array
    CodeForces 721C Journey
    CodeForces 415D Mashmokh and ACM
    CodeForces 718C Sasha and Array
    CodeForces 635C XOR Equation
    CodeForces 631D Messenger
    田忌赛马问题
  • 原文地址:https://www.cnblogs.com/still-smile/p/13382870.html
Copyright © 2011-2022 走看看