【基础算法】Dijkstra算法,以上海地铁换乘为例,计算最短换乘路径和时间

一、算法概述:

该算法是一个求最短路径的算法,具体算法的思想为:

  1. 找出离源点O最近的点,把该点设为S;
  2. 以S点为中转点,查看如果以S点为中转点,计算源点O中转S点到各点的距离transfer_distance;
  3. 对比O到各点的距离对比transfer_distance,如果transfer_distance距离更短,则把O点到该点的距离调整为transfer_distance;
  4. 将S点标注为已算,计算下个点S2,重复步骤2
二、算法具体计算过程:
  1. 计算邻接矩阵 A A A A i j A_{ij} Aij为点i到点j的最短路径距离;
  2. 源点 i i i,对应邻接矩阵 A A A所在的 i i i行,为点i到其他各点的距离;
  3. 找到该行中距离 i i i最近的点 j j j,并将j列为已计算的点,下次不再计算;
  4. j j j为中转站,计算 i i i到各点的距离,如果距离小于之前已有的最短距离,则更新该点的数据;
  5. 更新完数据后,重复3,4两步;
  6. 最终得到 i i i点到其他各点的最短距离。

为了更好的理解该算法,本文打算以上海地铁中转为例,通过代码将以上的算法实现。

需要注意的是:
  1. 地铁线路之间存在换乘时间,该时间也应该计算在总路程之内;
  2. 初始化邻接矩阵的时候,计算两点间最短距离时,两点应处在同一条线路。

具体代码请前往:
https://github.com/geeklili/Dijkstra_Algorithm

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值