• 矩阵最小路径


    原创


    问题描述:

    给出一个 n x m 的矩阵,从左上角开始每次只能向右走或者向下走,

    最后达到右下角的位置,路径中所有数字累加起来就是路径和,返回所有路径的最小路径和。

    比如:

    1  3  5  9

    8  1  3  4

    5  0  6  1

    8  8  4  0

    最短路径是12

    解题思路:

    此题属于动态规划类题目,我们可以用一个dp二维数组存放最短路径,dp[i][j]就是左上角到位置(i,j)

    的最短路径,我们要求的是dp[n][m],我们只需要从dp[i-1][j],dp[i][j-1]这两个中选出最小者再加上

    dp[n][m]自己本身的路径就可以了。

     代码:

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 int min(int a,int b)
     5 {
     6     return a<b?a:b;
     7 }
     8 
     9 int main()
    10 {
    11     int n,m;
    12     scanf("%d%d",&n,&m);    //n行m列 
    13     
    14     int **arr,**dp;    //分配空间
    15     arr=(int **)malloc(sizeof(int *)*n);
    16     dp=(int **)malloc(sizeof(int *)*n);    //dp[i][j]代表从左上角到位置(i,j)时的最短距离 
    17     int i;
    18     for(i=0;i<=n-1;i++)
    19     { 
    20         arr[i]=(int *)malloc(sizeof(int)*m);
    21         dp[i]=(int *)malloc(sizeof(int)*m);
    22     } 
    23         
    24     int j;    //数组赋值 
    25     for(i=0;i<=n-1;i++)
    26         for(j=0;j<=m-1;j++)
    27             scanf("%d",&arr[i][j]);
    28             
    29     for(i=0;i<=n-1;i++)
    30         for(j=0;j<=m-1;j++)
    31         {
    32             if(i==0 && j==0)
    33                 dp[i][j]=arr[i][j];
    34             if(i==0 && j!=0)    //第一行边界
    35                 dp[i][j]=arr[i][j-1]+arr[i][j];
    36             if(i!=0 && j==0)    //第一列边界 
    37                 dp[i][j]=arr[i-1][j]+arr[i][j];
    38             if(i!=0 && j!=0)    //其他
    39                 dp[i][j]=arr[i][j]+min(dp[i-1][j],dp[i][j-1]);
    40         }    
    41     printf("%d",dp[n-1][m-1]);
    42     return 0;
    43 } 
    View Code

     2018-03-19

    作者:剑冢、
    本文为原创博客,转载请声明出处地址。
  • 相关阅读:
    Nginx安装详细指南
    git 常用命令
    oracle server config
    CentOS6.5下安装oracle11gR2
    oracle query
    oracle function
    oracle note
    正则表达
    DOM&BOM的起源、方法、内容、应用
    sticky
  • 原文地址:https://www.cnblogs.com/chiweiming/p/8603948.html
Copyright © 2020-2023  润新知