一、算法概述:

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

  1. 找出离源点O最近的点,把该点设为S;
  2. 以S点为中转点,查看如果以S点为中转点,计算源点O中转S点到各点的距离transfer_distance;
  3. 对比O到各点的距离对比transfer_distance,如果transfer_distance距离更短,则把O点到该点的距离调整为transfer_distance;
  4. 将S点标注为已算,计算下个点S2,重复步骤2

二、算法具体计算过程:

  1. 计算邻接矩阵AAA,AijA_{ij}Aij​为点i到点j的最短路径距离;
  2. 源点iii,对应邻接矩阵AAA所在的iii行,为点i到其他各点的距离;
  3. 找到该行中距离iii最近的点jjj,并将j列为已计算的点,下次不再计算;
  4. 以jjj为中转站,计算iii到各点的距离,如果距离小于之前已有的最短距离,则更新该点的数据;
  5. 更新完数据后,重复3,4两步;
  6. 最终得到iii点到其他各点的最短距离。

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

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

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

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

  1. 计算机网络最短路径路由选择,最短路径算法Dijkstra算法在路由选择中的应用.pdf...

    最短路径算法Dijkstra算法在路由选择中的应用.pdf 计算机与网络 江苏联合职业技术学院徐州机电工程分院 王恒青 江苏联合职业技术学院徐州生物工程分院 宋如敏 [摘要]本文介绍了路由算法的设计目 ...

  2. 图论算法-dijkstra算法

    dijkstra算法 思想: 用于解决单源最短路问题,即给定有向图G和起点from,通过算法得到from到其他每个顶点的最短距离. 步骤: 设置集合selectedNode存放已被访问过的点,每次从未 ...

  3. dijkstra邻接表_掌握算法-图论-最短路径算法-Dijkstra算法

    如果图是赋权图,那么问题就变得更困难了不过我们仍然可以使用来自无权情形时的想法. 我们保留所有与前面相同的信息.因此,每个顶点或者标记为Known的,或者标记为Unknown的.像之前一样,对每一个顶 ...

  4. 牛客网 最短路 Floyd算法 Dijkstra算法 Java大数

    链接:https://www.nowcoder.com/questionTerminal/a29d0b5eb46b4b90bfa22aa98cf5ff17 来源:牛客网 最短路径 热度指数:2992 ...

  5. HDU 1874 SPFA算法Dijkstra算法

    SPFA 快速最短路算法 队列优化 #include<bits/stdc++.h> using namespace std; const int maxn=205; vector<p ...

  6. 最短路算法 :Bellman-ford算法 Dijkstra算法 floyd算法 SPFA算法 详解

     本文链接   :http://www.cnblogs.com/Yan-C/p/3916281.html . 在本文中因为邻接表在比赛中不如前向星好写,而且前向星效率并不低所以,本文的代码 存图只 ...

  7. Floyd算法Dijkstra算法

    Floyd算法和Dijkstra算法 一.Floyd算法 1.简要介绍:Floyd算法又称插点法,是利用动态规划的思想寻找有权图多源点之间最短路径的算法,算法目的是寻找从点i到点j的最短路径. 2.步 ...

  8. 图论经典算法——Dijkstra算法

    1. 解决问题 目的是求某一顶点到其余各个顶点[最短路径]. 2. Dijkstra算法思想 假设一共有两个顶点集合 S 和 T ,集合 S 中存放图中已找到最短路径的顶点,集合 T 中存放图中的剩余 ...

  9. 【JAVA算法】图论算法 -- Dijkstra算法

    写在前面:     我也是一名java语言的爱好者,仅以此文作为学习的记录,对于文中出现的代码规范,代码格式,算法效率等问题,希望各路大神不吝赐教,在下感激不尽.同是学习的同学也同样希望互相交流,取长 ...

最新文章

  1. asn1学习笔记 约束
  2. python画折线图详解-手把手教你Python yLab的绘制折线图的画法
  3. 【Linux】一步一步学Linux——nohup命令(136)
  4. 华为升级harmonyos的机型名单,华为鸿蒙 OS 2.0 系统适配名单已出,四月推送,天玑机型暂时无缘...
  5. js自定义对象 (转)
  6. C++STL::两种方式实现STL容器的reference语义
  7. llvm+clang 添加 LTO(Link Time Optimization) 支持
  8. Ghost安装系统步骤
  9. 422串口线互连的接法
  10. APEX 文件格式学习记录
  11. 程序之外_与我长跑十年的女朋友嫁人了(转)
  12. Java学习笔记(五):Java多线程(细致入微,持续更新)
  13. Winedit7.0自定义一键编译
  14. 职场暗访:女大学生应聘遭遇性测试
  15. 桌面运维用到的网站(转载)
  16. Linux Deepin安装Typora教程
  17. SAP存储税率税码的相关表
  18. java flash 压缩_JAVA系统下的FLASH,FLV视频应用解决方案
  19. 利用弹弹play播放器在线观看视频的办法
  20. Databricks 第6篇:Spark SQL 维护数据库和表

热门文章

  1. 软方电子科技-工业自动化控制的Android工业平板电脑开发
  2. 我是二本,凭什么可以进入大厂
  3. 基于Android的手机订餐系统设计与实现(二)
  4. 2019夏令营之行(上) 天大智能与计算学部+北航网安+北航计算机
  5. CollapsingMergeTree
  6. AD-Census代码的理解(十字臂交叉聚合)
  7. 酒精测试仪方案:酒精测试仪是根据什么原理测酒精溶度?
  8. 《征服C指针》读书笔记
  9. 《征服C指针》——读书笔记(6)
  10. 学习准备:ensp的下载和安装