数据结构——第四章图:06求两点之间的最短路径

1.求两点之间的最短路径:

(1)求从某个源点到其余各点的最短路径:Dijstra(迪杰斯特拉)算法;

(2)求每一对顶点之间的最短路径:Floyd(弗洛伊德)算法。

2.Dijstra算法的基本思想:依据最短路径的长度递增的次序求得各条路径。其中,从源点到顶点v的最短路径是所有最短路径中长度最短者。在这条路径上,必定只含有一条弧,并且这条弧的权值最小。(1)下一条路径长度次短的最短路径只有两种情况:

①直接从源点到该点(只含一条弧);

②从源点经过顶点v1,再到达该顶点(由两条弧组成)。

(2)再下一条路径长度次短的最短路径有三种情况:

①直接从源点到该点(只含一条弧);

②从源点经过顶点v1,再到达该顶点(由两条弧组成);

③从源点经过顶点v2,再到达该顶点。

(3)其余最短路径:或者是直接从源点到该点(只含一条弧);或者是从源点经过已求得最短路径的顶点再到达该顶点。

3.求最短路径的Dijstra算法:设置辅助数组Dist,其中每个分量Dist[k]表示当前所求得的从源点到其余各顶点k的最短路径。一般情况下,Dist[k] = <源点到顶点k的弧上的权值> 或者 = <源点到其它顶点的路径长度> + <其它顶点到顶点k的弧上的权值>。

例如:下图V0到各终点最短路径及长度的Dijstra算法计算过程:

    

4.求每一对顶点之间最短路径的Floyd算法基本思想:从vi到vj的所有可能存在的路径中,选出一条长度最短的路径。

例如:下图各两点间最短路径及长度的Floyd算法计算过程:(邻接矩阵中的第n行m列,意为从第n-1个结点到m-1个顶点的距离)

 该图的邻接矩阵如下: 

以顶点0为中介点的邻接矩阵如下:

以顶点1为中介点的邻接矩阵如下:

以顶点2为中介点的邻接矩阵如下:

 

以顶点3为中介点的邻接矩阵如下:

 

以顶点4为中介点的邻接矩阵如下(最终结果):

posted @ 2018-11-07 11:52  H36Phaeton  阅读(1289)  评论(0编辑  收藏  举报