【C语言全代码】学渣带你刷Leetcode0064. 最小路径和

题目描述

给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:每次只能向下或者向右移动一步。

示例:

输入:
[
  [1,3,1],
  [1,5,1],
  [4,2,1]
]
输出: 7
解释: 因为路径 1→3→1→1→1 的总和最小。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-path-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

---------------------------------------------------------------------------------------------------------------------------------

白话题目:

从左上走到右下,怎么走距离最短(注意:只能向下或者向右走)

-----------------------------------------------------------------------------------------------------------------------------------

算法:

同样也是一道动态规划的方法

现象最优的矩阵是怎么来的,只能从上面或者下面来。

详细解释关注 B站  【C语言全代码】学渣带你刷Leetcode 不走丢 https://www.bilibili.com/video/BV1C7411y7gB

C语言完全代码

#include <stdio.h>
#include <stdlib.h>
int min(int a,int b)
{
    return a<b?a:b;
}
int minPathSum(int** grid, int gridSize, int* gridColSize)
{
    printf("%d %d\n",gridSize,*gridColSize);
    if(gridSize==0) return 0;
    int row=gridSize;
    int column=*gridColSize;
    int dp[row][column];
    int i;
    int j;
    for ( i = 0; i < row; i ++)
    {
        for ( j = 0; j < column; j ++)
        {
            dp[i][j] = 0;
        }
    }

    dp[0][0]=grid[0][0];

    for(i=1; i<column; i++)
    {
        dp[0][i]=grid[0][i]+dp[0][i-1];
    }

    for(i=1; i<row; i++)
    {
        dp[i][0]=grid[i][0]+dp[i-1][0];
        for(j=1; j<column; j++)
        {
            dp[i][j]=min(grid[i][j]+dp[i-1][j],grid[i][j]+dp[i][j-1]);
        }
    }


    return dp[row-1][column-1];
}

int main()
{
    int gridSize;//m
    int gridColSize;//n
    printf("输入m*n大小,例如 (3 3)");
    scanf("%d %d",&gridSize,&gridColSize);
    printf("输入矩阵,例如 (1 3 1     1 5 1   4 2 1)\n");
    int** grid=(int**)malloc(sizeof(int*)*gridSize);
    int m,n;
    for ( m = 0; m < gridSize; m ++)
    {
        grid[m]=(int*)malloc(sizeof(int)*gridColSize);
        for ( n = 0; n< gridColSize; n ++)
        {
            scanf("%d",&grid[m][n]);
        }
    }
    /*
    int i,j;
    for(i=0; i<gridSize; i++)
    {
        for ( j = 0; j < gridColSize; j ++)
        {
            printf("%d ",grid[i][j]) ;
        }
        printf("\n");
    }
    */

    int result=minPathSum(grid,gridSize, &gridColSize);
    printf("%d\n",result);
    return 0;
}
发布了27 篇原创文章 · 获赞 2 · 访问量 3374

猜你喜欢

转载自blog.csdn.net/qq_39729096/article/details/105387992
今日推荐