关于dijsktra和prim的算法特殊解释

前言:

本文为:https://www.cnblogs.com/lihanyu116/p/14982524.html 补充。

 

关于dijsktra和prim的算法特殊解释

 

对于这种情况,我们按照dijsktra和prim的算法的思想,选择点1为起点后。寻找点1的最短边,那么这时我们会选到1--2这条边权为1的边,那么记录下点2为nixt,然后再从点nixt更新并寻找寻找。

那么显然选择点2是错误的。

 

但是我们的这种dijsktra和prim的算法是正确的,为什么呢?

 

我们一步步来模拟一下他运算的过程。

首先我们选择点1后,更新此时的cost[2]=1,cost[3]=2。

我们将二者比较,明显到点2短,记录nixt=2;

然后更新点nixt(2)到点3的值。

重点来了,此时cost[3]仍然等于2,所以此时

cost[j]>map [nixt][j] 即 cost[3]>map [2][3]

这个条件显然是不成立的,所以不去更新。cost[3]还是我们第一次更新的值。

此时从1到3的最短路,为2。

上面那句话可以通俗的理解为:

已经存储的“伪最短路”(cost[j])和我们寻找的“最新的最短路”(map[nixt][j])比较选择短的一个。

其实对于哪怕像多层图最短路,也是运用的这种思想。

如有不足,请指出,谢谢!

 

上一篇:01 分数规划


下一篇:【车间调度】基于模拟退火算法求解车间调度问题matlab源码