【动态规划(二)】迪杰斯特拉算法与普里姆算法

本文介绍了迪杰斯特拉算法和普里姆算法的分析、实现及测试结果。迪杰斯特拉算法用于求解最短路径,通过邻接矩阵和动态规划思路实现。普里姆算法则用于寻找最小生成树,同样基于邻接矩阵,通过不断选择最小权值边进行扩展。文章详细阐述了两个算法的思考过程,并提供了源码示例。
摘要由CSDN通过智能技术生成

1.1介绍

按理说迪杰斯特拉算法与普里姆算法不是一类东西,前者是最短路径算法,后者是最小生成树算法,为什么会放在一块呢?因为二者实在是太相似了。不管是从代码结构上以及分析方法上来说。对于我这种小白而言,看一百遍,合上书还是会忘了从哪开始编写代码。好在学了一些动态规划的东西,现在这两个算法从头写到尾是没有问题了。

下面使用的例子(图),出自程杰的《大话数据结构》,之前我也是在用这本书学习数据结构,也是朋友推荐我的,此书比较基础,没有讲到动态规划的东西。

写这两个算法还是比较简单的,这里记录的东西是我个人的推导思路以及想到的比较重要的点。有疑义的地方,可以去看看《大话数据结构》和《算法导论》的相关章节,一起学习进步。

1.2迪杰斯特拉算法

1.2.1分析


问题:如上图,以V0为起点求V0到各点的最短路径。

(1)动态规划的求解思路是,每次求得的最短路径的点是基于上次求得的最短路径的点,如V0V2是在V0V1的基础上得到的,所以每次都要选取V0所到路径最短的点来求解V0到下一个点的最短路径。当然,感觉这就跟没说一样。

(2)思路是这样,代码如何构建呢?首先需要一个邻接矩阵MGraph来存储这张图。

(3)此处是起点V0点,无论起点是哪个都是一样的道理。那么就用起点V0来初始化。创建一个数组ShortPathTable来存储V0到各点的最短路径值,也就是循环ShortPathTable[i]=MGraph[0][i]。一开始,V0只能到V1V2所以该数组的值就是{01,3INFINITYINFINITYINFINITYINFINITYINFINITYINFINITY}INFINITY为无限大。

(4)基于思路(1),利用循环,从ShortPathTable(因为它存储V0到各点的最短路径值)中找一个路径值最短的点,此处也就是V1


(5)此时V0通过V1就可到达V

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值