数据结构——第四章图: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算法计算过程:

该图的邻接矩阵如下         

5.

猜你喜欢

转载自www.cnblogs.com/hou36/p/9921734.html
今日推荐