把从一个顶点v0到到途中其余任意一点v1路径上所有边权值之和定义为该路径带权路径长度,带权路径长度最短的那条路径称作最短路径。
求解最短路径的算法通常依赖于一种性质,两点之间的最短路径也包含了路径上其它顶点的最短路径。
带权有向图最短路径问题分为两类:
1、单源最短路径
2、每一对顶点间的最短路径

Dijkstra算法求单源最短路径问题

求带权有向图某个源点到其余各顶点的最短路径,常用Dijkstra算法。
先以一个例子理清算法执行过程,再看概念
dist[i]表示源点到顶点i的当前最短路径长度,初始值为0
arcs[i][j]表示有向边<i,j>的权值,不存在记为∞
1、首先将源点顶点1加入集合S
2、计算出源点到S外其他顶点的路径长度,
顶点1-顶点2:dist[2]=10
顶点1-顶点5:dist[5]=5
顶点1-顶点3:dist[3]=∞
顶点1-顶点4:dist[4]=∞ (到此算是初始化)
源点-顶点5当前路径长度最短,故将顶点5加入S
3、修改从源点1到S外顶点2、3、4可达的最短路径长度,即
因为dist[5]+arcs[5][2]<dist[2],则dist[2]=dist[5]+arcs[5][2]=8
因为dist[5]+arcs[5][3]<dist[3],则dist[3]=dist[5]+arcs[5][3]=14
因为dist[5]+arcs[5][4]<dist[4],则dist[4]=dist[5]+arcs[5][4]=7
源点-顶点4当前路径长度最短,故将顶点4加入S
4、修改从源点1到S外顶点2、3可达的最短路径长度,即
因为dist[5]+arcs[5][2]<dist[2],则dist[2]=dist[5]+arcs[5][2]=8
因为dist[4]+arcs[4][2]>=dist[2],则dist[2]保持
因为dist[5]+arcs[5][3]>=dist[3],则dist[3]保持
因为dist[4]+arcs[4][3]<dist[3],则dist[3]=dist[4]+arcs[4][3]=13
源点-顶点2当前路径长度最短,故将顶点2加入S
4、修改从源点1到S外顶点3可达的最短路径长度,即
因为dist[5]+arcs[5][3]>=dist[3],则dist[3]保持
因为dist[4]+arcs[4][3]>=dist[3],则dist[3]保持
因为dist[2]+arcs[2][3]<dist[3],则dist[3]=dist[2]+arcs[2][3]=9

总结Dijkstra算法步骤

dist[i]表示源点到顶点i的当前最短路径长度,初始值为0
arcs[i][j]表示有向边<i,j>的权值,不存在记为∞
用集合S存储以求得最短路径的顶点,s[vi]=1表示将顶点i放入S中
path[i]表示从源点到所求顶点i最短路径,顶点i的前驱结点。算法结束之后,可根据此值追溯到从源点到所求结点的最短路径经过的顶点(这里不做说明)
实现思路:
1、初始化,集合S初始值为0,dist[]初始值dist[j]=arcs[0][j],如上例中的初始化
2、循环执行以下两步直到所有的点都包含:
1)从集合外的顶点中找出一个顶点vi,vi满足dist[i]最小,并将顶点i加入集合S中
2)修改从源点到S外所有顶点k的dist[vk]的值,修改规则如下:如若dist[i]+arcs[i][k]<dist[k],则dist[k]=dist[i]+arcs[i][k],dist[i]是已加入集合的顶点的最短路径长度,dist[k]是S外所有顶点中某一个顶点的当前最短路径长度

边上带有负权值,此算法不适用

Floyd算法求各顶点之间最短路径问题

实现思路:实例加概念

拥有n个顶点的图,产生1个n阶方阵序列A0以及不停的迭代产生的A1、A2…An,
用Ak[i][j]表示从顶点vi到顶点vj的路径长度,从vi到vj之间经过的顶点序号数没有大于k的,其中的k表示加入顶点k作为中间顶点,加入规则如下:如果得到的路径比原来的路径长度减少,则新路径代替原来的路径
A0、A1…A(n-1)保存了任意一对顶点当前的最短路径长度,An保存了任意一对顶点最终的最短路径长度
上图的邻接矩阵也就是 A0

A0的基础上vi-vj中间经过顶点1的路径长度即A1

A1的基础上vi-vj中间经过顶点2的路径长度即A2

A2的基础上vi-vj中间经过顶点3的路径长度即A3

此算法允许带负权值的边,但不允许包含有负权值的边组成的回路

最短路径问题实现思路相关推荐

  1. 7-2 单源最短路径 (10 分)(思路+详解+邻接表做法)Come Brather!!!!!!!!!!

    一:前言 本次题解先展示用邻接矩阵做的,但其会出现内存超限,因为确实是临界矩阵在数据很大的时候相比临界表是耗内存的,但是以前习惯用临界矩阵了,所以一上来就用临界矩阵做了,后来上网查了后知道邻接矩阵会内 ...

  2. 【C语言】街区最短路径问题解题思路

    描述  一个街区有很多住户,街区的街道只能为东西.南北两种方向. 住户只可以沿着街道行走. 各个街道之间的间隔相等. 用(x,y)来表示住户坐在的街区. 例如(4,20),表示用户在东西方向第4个街道 ...

  3. NYoj_07_街区最短路径问题 解题思路和代码

    题目: 描述 一个街区有很多住户,街区的街道只能为东西.南北两种方向. 住户只可以沿着街道行走. 各个街道之间的间隔相等. 用(x,y)来表示住户坐在的街区. 例如(4,20),表示用户在东西方向第4 ...

  4. 6. 最短路径:一通百通的秘密,动态规划设计思路

    6. 最短路径:一通百通的秘密,动态规划设计思路 动态规划设计思路 Dijkstra:慢速版 DP + BFS.快速版 DP + BFS + 贪心 Bellman-Ford:DP + 穷举 Floyd ...

  5. 图论3之图的最短路径算法

    上一篇我们讨论了图的遍历,实际问题中图的深度遍历是我们更常用的,除了图的遍历,我们一般遇到的问题更多是关于图的路径的问题.本篇将介绍图的四种常用遍历算法 一.深度或广度优先搜索算法(解决单源最短路径) ...

  6. 【路径规划】基于matlab蚁群算法机器人栅格地图最短路径规划【含Matlab源码 119期】

    ⛄一.简介 路径规划是实现移动机器人自主导航的关键技术,是指在有障碍物的环境中,按照一定的评价标准(如距离.时间.能耗等),寻找到一条从起始点到目标点的无碰撞路径,这里选取最短距离路径规划的评价标准, ...

  7. postgis+geoserver最短路径

    postgis+geoserver最短路径 1 安装软件 2 数据预处理 3 操作postgres 4 操作Geoserver 5 计算最短路径 6 问题记录 1 安装软件 安装PostgreSQL与 ...

  8. 最短路径:Dijikstra算法/Floyd算法

    目录 1.基础 2.单源最短路径--Dijikstra算法 3.所有顶点间的最短路径--Floyd算法 1.基础 2.单源最短路径--Dijikstra算法 思路 void ShortestPath_ ...

  9. 弗洛伊德算法(求最短路径)

    弗洛伊德算法(求最短路径) 在一个加权图中,如果想找到各个顶点之间的最短路径,可以考虑使用弗洛伊德算法. 弗洛伊德算法既适用于无向加权图,也适用于有向加权图.使用弗洛伊德算法查找最短路径时,只允许环路 ...

最新文章

  1. 老师与学生打赌,谁会赢?
  2. Windows7 UAC
  3. 导入CSS的三种方式
  4. qcustomplot删除一条曲线_微凉秋日的成熟风穿搭,选一条V领连衣裙搭配,优雅知性显身材...
  5. DL之BN-Inception:BN-Inception算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  6. Debug Docker: Error response from daemon: dial unix docker.raw.sock: connect: connection refused
  7. Linux centos查看cpu信息命令
  8. 关于低分辨率像素游戏下显示非防锯齿中文 / 汉字的研究
  9. Windows平台下搭建Git服务器
  10. error: #error regenerate this file with a newer version of protoc.
  11. 拓端tecdat|R语言实现LASSO回归——自己编写LASSO回归算法
  12. 74cms搭建 2021.03.13
  13. python使用requests库爬取淘宝食品信息,包含sign参数破解
  14. Xilinx SRIO_gen2关于时钟的问题
  15. 哥吃的不是饭,是农药~~!是化肥~~!是激素~!!
  16. 2021-3-22科研进展
  17. 理解数据库中候选码,主码,外码,主属性,非主属性!
  18. 五十 烤肉之后 我在软件园的那些日子里
  19. 简单网页设计静态成品分享
  20. 计算机java是什么意思

热门文章

  1. SD+PP+MM+FICO+HR概述
  2. 如何通过使用CRM客户管理系统让销售团队提升业绩!
  3. 青龙面板wxpusher一对一推送失败
  4. easycode使用指南
  5. 免费PDF转Word?有这几个网站就够了。
  6. 【目标检测-YOLO】PP-YOLO(v3版本)
  7. 多张图片合成一张图片(alpha混合)
  8. C语言开发小游戏—编译器篇graphic.h的安装
  9. php后台幻灯片管理,制作 后台管理界面、在线编辑器 幻灯片.ppt
  10. 使用H-lua框架制作魔兽争霸地图(13-练功房刷怪)