6月1日
双向迪杰斯特拉
1. 主要用于解决单个起点和单个终点的问题
2. 分别从起点
s
和终点
t
开始计算到达其他点的最短路,维护两个集合
S(i)
和
T(i)
,代表
s
到
i
的最短距离以及
t
到
i
的最短距离。
3. 每次选择
S(i)
和
T(i)
中最小的一个项进行按dijkstra算法更新。
4. 如果发现
S(i)
和
T(i)
都被访问,那么这就是一条可行的路径,取距离相加最小的即为最短路。
5. 算法在
Min(S(i)+T(i))<=Min(S(i))+Min(T(i))
时终止,求得的即为答案
6. 优化方法和dijkstra一样,可以用两个优先队列或者最小堆维护
S
和
T
集合的最小值。
7. 如果需要输出路径,更新距离时记录一下即可。
8. 参考双向迪杰斯特拉
9. T.A.j.Nicholson. Finding the shortest route between two points in a network. The Computer Journal,9:275-280