课上Dijkstra算法练习
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了课上Dijkstra算法练习相关的知识,希望对你有一定的参考价值。
课上Dijkstra算法练习
Dijkstra算法,求解附图顶点A的单源最短路径,在纸上画出求解过程,上传截图。(注意图上要有自己的学号和姓名)
老师在上课时的ppt中讲解过程如下图:
- 参考理解最短路径——迪杰斯特拉(dijkstra)算法,得出完整的算法原理。
①首先,引入一个辅助向量D,它的每个分量D[i]表示当前所找到的 Dijkstra算法运行动画过程 Dijkstra算法运行动画过程 从起始点 (即源点 )到其它每个顶点 的长度。例如,D[3] = 2表示从起始点到顶点3的路径相对最小长度为2。这里强调相对就是说在算法执行过程中D的值是在不断逼近最终结果但在过程中不一定就等于长度。
②D的初始状态为:若从v 到v[i]有弧(即从v到v[i]存在连接边),则D[i]为弧上的权值(即为从v到v[i]的边的权值);否则置D[i]为∞。显然,长度为 D[j]= Min{ D |v[i]∈V } 的路径就是从v出发到顶点v[j]的长度最短的一条路径,此路径为(v,v[j])。
③那么,下一条长度次短的是哪一条呢?也就是找到从源点v到下一个顶点的最短路径长度所对应的顶点,且这条最短路径长度仅次于从源点v到顶点v[j]的最短路径长度。 假设该次短路径的终点是v[k],则可想而知,这条路径要么是(v,v[k]),或者是(v,v[j],v[k])。它的长度或者是从v到v[k]的弧上的权值,或者是D[j]加上从v[j]到v[k]的弧上的权值。
④一般情况下,假设S为已求得的从源点v出发的最短路径长度的顶点的集合,则可证明:下一条次最短路径(设其终点为x)要么是弧(v,x),或者是从源点v出发的中间只经过S中的顶点而最后到达顶点 的路径。 因此,下一条长度次短的的最短路径长度必是D[j]= Min{ D[i] |v[i]∈V-S },其中D 要么是弧( v,v[i])上的权值,或者是Di和弧(v[k] ,v[i] )上的权值之和。
那么看回这道题目,我起初的答案是下图,错在了...题目抄错了,很无语吧。
那么通过课下的学习,如何修改过程以及结果呢?
感想:
- 课堂上认真听讲努力消化,课下再花功夫搞清楚。但是题目抄错还是只有一次就够了(捂脸)。
以上是关于课上Dijkstra算法练习的主要内容,如果未能解决你的问题,请参考以下文章
算法系列学习Dijkstra单源最短路 [kuangbin带你飞]专题四 最短路练习 A - Til the Cows Come Home