C语言----最小路径和

C语言----最小路径和

 一切思路尽在代码中,每一步都有详细的介绍


int minPathSum(int** grid, int gridSize, int* gridColSize)
{
    int rows = gridSize;
    int col = gridColSize[0];
    
    int **dp = (int**)malloc(rows*sizeof(int*));
    int i,j;
    for(i=0; i<rows; i++)
    {
        dp[i] = (int*)malloc(col*sizeof(int));
        memset(dp[i],0,col);
    } 

    dp[0][0] = grid[0][0];
    //第一行的情况,只能由左向右
    for(i=1; i<col; i++)
        dp[0][i] = dp[0][i-1] + grid[0][i];
    
    //第一列的情况,只能由上到下
    for(i=1; i<rows; i++)
        dp[i][0] = dp[i-1][0] + grid[i][0];
    
    //其他有两种选择,从左走到右,从上走到下,取两者中的较小者
    for(i=1; i<rows; i++)
    {
        for(j=1; j<col; j++)
        {
            dp[i][j] = (dp[i-1][j] < dp[i][j-1]?dp[i-1][j]:dp[i][j-1]) + grid[i][j];
        }
    }
    return dp[rows-1][col-1];

}

执行结果:

C语言----最小路径和

 

上一篇:malloc


下一篇:子函数中malloc的使用