众所周知,Dijkstra算法可以求得一条最短路径,但如果想求多条短路径或者最短路径有多条时,无法求得,需要用到Yen算法。
源点C,终点H
1)通过最短路径算法Dijkstra得到C到H的最短路径
Q(1)=C-E-F-H(5)
2) 偏离点C,E,F
3) C->H,候选路径:C-D-F-H(8)
4) E->H,候选路径:C-E-G-H(7)
5) F->H,候选路径:C-E-F-G-H(8)
6) 第二短路径:Q(2)= C-E-G-H(7)
Q:如何从候选列表中选出合适的路径
如果路径权值和最小的路有多条:从其中选出节点数最少的路径。
Q:求Vi到终点d的最短路径
设起点为s,终点为t,偏离点为Vi。求偏离点到终点的最短路径时要注意两个问题
(1)防止从起点到终点的整体路径有环
从Vi到t的最短路径不能包含s到Vi的路径上的任何节点
(2)避免与已经在结果列表中的路径重复
从Vi发出的边不能与结果列表中的路径p1,p2,...pk,上从Vi发出边的相同
原文:https://www.cnblogs.com/Horizon-asd/p/12602273.html