矩阵最小路径

news/2024/9/9 13:47:00

原创


问题描述:

给出一个 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

转载于:https://www.cnblogs.com/chiweiming/p/8603948.html


http://lihuaxi.xjx100.cn/news/238635.html

相关文章

数据通信技术(八:OSPF单区域配置实验)

OSPF单区域配置实验(Cisco) 一&#xff0e;知识准备 1.掌握了OSPF动态路由协议的定义和功能&#xff1b; 2.掌握了OSPF动态路由协议的特征和工作原理。 二&#xff0e;实验目的 掌握OSPF动态路由单区域的基本配置方法和结果验证。 掌握OSPF单区域配置的作用 三&#xff…

《重构-改善既有代码的设计》读书笔记(二)

12、Lazy Class – 冗赘类 对于几乎没有用的类&#xff0c;运用inline class 将其功能移动。去除这些不值得维护的类。 13、Speculative Generality – 夸夸其谈未来性 对于你现在用不到&#xff0c;觉得总有一天会用到的代码&#xff0c;要警惕。用不上的装置总会挡我们的路&a…

软件开发 理想_我如何在12个月内找到理想的软件工作

软件开发 理想In this talk, Matt Woods shares the 3 cornerstone habits that helped him land his dream software job in just 12 months. These habits paved the way for him to consistently grow as a software developer, balloon his professional network, and easi…

vivado烧写bin文件到flash 中

点击 bitstream setting &#xff0c;将 bin_file 勾上&#xff0c;点击 OK。 2&#xff09;点击 generate bitstream &#xff0c;生成 bit 文件和 bin 文件 3&#xff09;点击 open hardware manager&#xff0c;连接板子。 4&#xff09;选中芯片&#xff0c;右键如下操作。…

数据通信技术(五:直连路由)

数据通信直连路由实验 1、路由的端口配置 2、查看及验证 PC1&#xff1a; PC2 3、关闭f0/0端口 4、重新启用f0/0端口并查看验证 PC1&#xff1a; PC2&#xff1a; 数据通信技术&#xff08;一&#xff1a;IP划分&#xff09; https://blog.csdn.net/qq_37823605/article/detai…

遮罩层+软键盘

一&#xff0e;清关里边申请清关 上传图片由于本身就是布局用的图片&#xff0c;微信手机长按会出现保存收藏该图片。 解决方法&#xff1a;添加同级元素充当遮罩层。设置样式&#xff0c;把点击事件从设置的上传图片中移除即可。 1&#xff09;<!-- 图片遮罩层 --> <…

以太坊概念知识入门篇

想知道更多关于区块链技术知识&#xff0c;请百度【链客区块链技术问答社区】 链客&#xff0c;有问必答&#xff01;&#xff01;以太坊 以太坊&#xff0c;Ethereum是一个分布式的计算机&#xff0c;有许多的节点&#xff0c;其中的每一个节点&#xff0c;都会执行字节码&…

python 类中定义类_Python中的动态类定义

python 类中定义类Here’s a neat Python trick you might just find useful one day. Let’s look at how you can dynamically define classes, and create instances of them as required.这是一个整洁的Python技巧&#xff0c;有一天可能会有用。 让我们看一下如何动态定义…