一、算法概述:
该算法是一个求最短路径的算法,具体算法的思想为:
- 找出离源点O最近的点,把该点设为S;
- 以S点为中转点,查看如果以S点为中转点,计算源点O中转S点到各点的距离transfer_distance;
- 对比O到各点的距离对比transfer_distance,如果transfer_distance距离更短,则把O点到该点的距离调整为transfer_distance;
- 将S点标注为已算,计算下个点S2,重复步骤2
二、算法具体计算过程:
- 计算邻接矩阵 A A A, A i j A_{ij} Aij为点i到点j的最短路径距离;
- 源点 i i i,对应邻接矩阵 A A A所在的 i i i行,为点i到其他各点的距离;
- 找到该行中距离 i i i最近的点 j j j,并将j列为已计算的点,下次不再计算;
- 以 j j j为中转站,计算 i i i到各点的距离,如果距离小于之前已有的最短距离,则更新该点的数据;
- 更新完数据后,重复3,4两步;
- 最终得到 i i i点到其他各点的最短距离。
为了更好的理解该算法,本文打算以上海地铁中转为例,通过代码将以上的算法实现。
需要注意的是:
- 地铁线路之间存在换乘时间,该时间也应该计算在总路程之内;
- 初始化邻接矩阵的时候,计算两点间最短距离时,两点应处在同一条线路。
具体代码请前往:
https://github.com/geeklili/Dijkstra_Algorithm