目录
一、概念
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算法来讲,权值可以为负值,但不能有长度为负值的环路
希望大家一起学习,共同进步,如果有疑问或错误欢迎联系笔者。