通过例子超级通俗学会最短路径:迪杰斯特拉、弗洛伊德算法

一、迪杰斯特拉算法

看例子:

1、初始化起点v0到各顶点的距离
在这里插入图片描述
2、取出距离最短的顶点v2,那么v0-v2的最短路径就出来了,为8。找到一个节点了
在这里插入图片描述

3、然后看看能不能通过Vj继续更新最短路径,然后找最短的v1
在这里插入图片描述

4、此时,v1的最短路径也已经确定了,是13,然后我们接着执行相同的动作,看看能否通过v1到其他节点的距离能被缩短。找出最短的v3
在这里插入图片描述

5、找到v3的最短路径,再看由于v3的加入,到其他节点会不会更小。更小就修改矩阵。我们发现由于v3的加入,到v4的距离变小了。并且此时v0到v4的距离最小,所以再把v4加入到vj集合。

在这里插入图片描述

6、再通过v4试探,后面v6、过程同上。最后我们更新完毕,得到下面的矩阵,那么至此,v0到各个节点的最短路径就全部求出来了。

在这里插入图片描述


二、弗洛伊德

在这里插入图片描述
看例题:
在这里插入图片描述

开始算法:
1、以A顶点做中间媒介,看看能否缩短距离
在这里插入图片描述
2、再以B顶点做中间媒介
在这里插入图片描述

3、再以C做中间顶点
在这里插入图片描述

4、将所有顶点都做一次中间节点,结束之后,得到的矩阵,就是最短路径情况了。


最短路径算法在数据结构中是重点,在计算机网络中的路由算法也有涉及,可以说是考试的重点。考试一般不会让我们写代码,掌握上面的做题思想即可。