最短路径算法

目录

一、概念

二、Dijkstra算法---单源最短路径算法

三、各个结点间的最短路径---Floyd算法


一、概念

1.路径长度:路径上边的权值之和

2.最短路径:两结点间权值和最小的路径

3.单源最短路径:给定有向图G和源点A,求A到图G中其余各顶点的最短路径

二、Dijkstra算法---单源最短路径算法

1.基本思想:

1.1设置3个数组分别表示源点到其余各点的距离X(初始时与源点直接相连的点计入权值,其他点计无穷),源点到各点的最短路径Y(一开始都是无穷),已找到最短路径的点Z(一开始均为0)

1.2在X中找到距离最短的距离点(X中数的最小值),且该点还没有计入最短路径,将该最短路径计入Y,对应Z数组值置1,并且由该点找到与该点直接相连的点,将这些点连接的权值与已加入边(源点与“该点”)权值相加与X已有信息比较选择最小值计入X

1.3循环执行1.2直至所有点均找到最短路径

1.4也可以加入一个记录路径的数组

2.算法分析:时间复杂度O(n^2),空间复杂度O(n)

3算法功能:

3.1求顶点到其余顶点的最短路

3.2判断两顶点之间是否有路

3.3判断有无包含两顶点的环路

4.求单源最短路径的Dijkstra算法不允许边权值为负值

三、各个结点间的最短路径---Floyd算法

1.重复执行Dijkstra算法n次即可求得各结点间的最短路径,或者通过Floyd算法

2.Floyd算法的基本思想:

2.1顶点编号(1~n),邻接矩阵X表示有向网络

2.2依次向X中路径添加从1到n结点,判断最优路径存储,即可

2.3判断方法:X矩阵内数字代表AB路径,插入C,若AC+CB<AB,则用AC+CB替代AB(类似Dijkstra算法)

3.Floyd算法分析:时间复杂度O(n^3),空间复杂度O(n^2)

4.Floyd算法功能:

4.1求出任意两点间的最短路径

4.2判断任意两点间是否有路

4.3判断有向图经过任意两点是否有环路

5.对于Floyd算法来讲,权值可以为负值,但不能有长度为负值的环路


希望大家一起学习,共同进步,如果有疑问或错误欢迎联系笔者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

布纸刀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值