就像日常生活中的搭地铁问题,有的人会选择到达目的地最短距离的路线,有的人会选择地铁换乘次数最少的路线,其目的都是为了尽快到达目的地。选择到达目的地距离最短的路线,可以把两结点边的权值看成距离,而选择换乘次数最少的路线,可以把边的权值看作时间(换成次数少不代表路线就短嘛)。

图论中的最短路径问题,一般指一个无向图(或有向图),边的权值理解为两结点的距离,最短路径就是在求两个不同顶点的所有路径中,边的权值之和最小的那条路径。

而单源最短路径,是指从一个源点出发,到其他顶点的最短路径问题。在求单源最短路径时,我们遵守一个算法,由迪杰斯特拉提出的:“按路径长度递增的次序产生最短路径的算法”。

举个例子:

图中从路径长度为0开始,也就是VO源点本身。接下来寻找路径长度为1的路径,V1和V3,V1和V3是V0的直接邻接点。路径长度为2的邻接点就是V2和V6,路径长度为3的是V4和V5,路径长度为4的是V7和V8,最后路径长度为5的是V6,到这一步后,图中所有的顶点都被访问过了,所以算法到这就结束了。

0:V0;

1:V1和V3;

2:V2和V6;

3:V4和V5;

4:V7和V8;

5:V6;

算法从源点开始,先把源点相邻的邻接点全部访问完后,再接着想外扩散,这就相当于一个BFS广度优先搜索。

BFS模板:

算法:

传进去的S是图的源点,dist数组是存放源点S到某个邻接点index的最短距离,在初始化时把dist[ S ]=0;对照BFS广度优先搜索的模板可以看到,dist数组除了存放源点S到某个邻接点index的最短距离外,还起到一个功能就是检查该顶点是否有被访问过。所以初始化dist数组时,除了源点dist[ S ]=0,数组内其他的元素应该被初始化为一个不可能是两点间距离的值(例如-1)。

path数组是记录路径,存放源点S到某个顶点index上经过的某个顶点。程序一开始先把源点S压入队列Q里,然后从队列中弹出一个元素给V,接着for循环遍历V的每一个邻接点,如果S到某个顶点index没被访问的话,就把S到该顶点index的距离存进数组dist中,它们之间的距离就等于前一个顶点的距离+1即可。而这个V就是S到V中必经过的顶点,所以存到path数组中。

无权图的单源最短路径相关推荐

  1. BFS求无权图的单源最短路径-邻接矩阵存储

    //邻接矩阵存储 void BFS_MIN-Distance(Graph G,int u){//d[i]表从u到i的最短路径for(i=0;i<G.vexnum;i++)d[i]=INT_MAX ...

  2. 图的单源最短路径:Dijkstra算法实现

    本文介绍的是图的非负权值的单源最短路径问题.问题的提出是,对于有权图D,t提供源点v,要找到从v到其他所有点的最短路径,即单源最短路径问题,在本文中,解决这一问题,是普遍比较熟悉的Dijkstra算法 ...

  3. 图的单源最短路径(Dijkstra算法)

    单源最短路径问题 如果从图中某一顶点(源点)到达另一顶点(终点)的路径可能不止一条,如何找到一条路径使得沿此路径各边上的权值总和达到最小. Dijkstra算法由来 迪杰斯特拉算法(Dijkstra) ...

  4. 图的单源最短路径算法

    第1关:求图(邻接矩阵存储)最短路径的狄克斯特拉算法 任务描述 本关任务:图的存储结构为邻接矩阵,要求编写函数实现狄克斯特拉算法. 测试说明 平台会对你编写的代码进行测试: 测试输入: 1 lt4.t ...

  5. 图的单源最短路径,Floyd算法(数据结构c++)

    这个算法结构很是简单,但是理解还是有一定的困难,一开始做的时候想不明白,跟着算法自己动手画画就知道这个算法具体是怎么回事了. 时间复杂度是O(N*3) 算法有点动态规划的意思,有两个数组,一个(dis ...

  6. 【2023王道数据结构】【图】通过C++实现图的BFS(广度优先遍历)算法求单源最短路径问题C、C++完整实现(可直接运行)

    ~~~笔锋至此又怎能平淡而终,故事开始便不承认普通✌✌✌ ✌ 题目及题解持续更新中 [2023王道数据结构目录]课后算法设计题C.C++代码实现完整版大全 题目: 通过C++实现图的BFS(广度优先遍 ...

  7. 单源最短路径bellman算法

    介绍 在一个权重,有向图G=(V,E)中,连接所有顶点且拥有最小权重值的路径是此图的单源最短路径.单源最短路径可以解决许多最短路径问题的变种:如一个顶点到其它所有顶点最短距离,2个顶点对之间的最短距离 ...

  8. 四种不同单源最短路径算法性能比较

    四种不同单源最短路径算法性能比较   一.最短路径问题描述 单源最短路径描述:给定带权有向图G=(V,E),其中每条边的权是非负实数.另外,还给定V中的一个顶点,称之为源.现在要计算从源到其他各顶点的 ...

  9. 图论-单源最短路径算法(拓扑,Dijkstra,Floyd,SPFA)

    前言 单源最短路径是学习图论算法的入门级台阶,但刚开始看的时候就蒙了,什么有环没环,有负权没负权,下面就来总结一下求单源最短路径的所有算法以及其适用的情况. 单源最短路径 设定图中一个点为源点,求其他 ...

最新文章

  1. cordova 环境配制和创建插件
  2. typescript 中 let和var的区别
  3. @valid 不生效_黑帽seo高手-实战细谈301生效周期+影响收录重要因素(探索)
  4. 《你不知道的JavaScript》-- 精读(五)
  5. 云上技术 | 混合云多活容灾方案
  6. Windows组策略完善主机安全整改实战(1)
  7. ddr5内存上市时间_DDR5内存明年才能上市,SK Hynix已预研DDR6:12Gbps
  8. win10系统预览体验计划错误代码0x800bfa19怎么办
  9. AE一键快速生成MG爆炸图形动画插件:Burst Box for Mac
  10. 模型操作_77个典型岗位员工胜任素质模型操作指导手册
  11. qt 编译成apk_GitHub - qtxtz/AndroidMerageAPK: 实现android自动打包的程序
  12. 探测能源、跨洲安全通信……你所想不到的量子技术!
  13. VS 2017 RC到期的解决方法
  14. 什么是延展性(Malleability,可鍛性)
  15. 『nForce主板』巧妙去掉“安全删除硬盘”图标!
  16. 人工智能十大算法_【读书】人工智能和大数据:新智能的诞生/人工智能科学与技术丛书...
  17. 用扫码枪收款钱到哪里_如何申请微信官方收款码(信用卡收款)
  18. JavaScript设计模式——观察者模式
  19. 服务器96g运行内存,别被坑了,2019入手小米9到底选择6G运存还是8G?看完你就懂了!...
  20. NKOJ C2153「迎新春,贺新年,LJ24祝大家新年快乐」赛后总结帖by TangH

热门文章

  1. 下载软件创建桌面图标
  2. 关于Ctrl+PageDown在使用查找功能后不能使用的问题
  3. Mac宝藏软件推荐(笔者也在用)(一)
  4. 【C语言】数据结构实验报告--单链表
  5. solrCloud配置
  6. linux centos命令大全,CentOS(Linux) 常用命令
  7. java制作安卓游戏脚本_autoA开源(用java写安卓无障碍脚本)
  8. WDK与DDK的区别
  9. 非学校用户如何免费下载论文
  10. EOS 一周回顾(11.25-12.1)