目录
Floyd算法
Dijsktar算法
Bellman-Ford算法
Kruskal算法
Prim算法
一.Floyd(弗洛伊德)(多源最短路径)时间复杂度较高,可适用顶点数少
思想:三行for循环 第一行:经过哪个点(k)中转
第二行:起点
第三行:终点
核心代码:
二.Dijsktar(迪杰斯卡尔)(单源最短路径)
思想:
找到一个离源点最短的点,以该点为中心进行扩展(源点到该点和该点到其余点的距离比源点直接到其余点的距离小,就更新该距离),直至重复n(顶点数)-1次。
核心代码:
三.Bellman-Ford(贝尔曼)(解决负权边)
思想:
通过输入的起点、终点、边进行松弛(如果源点到终点的直接距离比源点到起点和起点到终点的距离还要大,就进行更新),直到重复n-1次(最多有n-1条边)。
核心代码:
四.Kruskal(克鲁斯卡尔)
思想:
将边权值进行排序,每次选取最短边且两端顶点没有连接(并查集判断)的两点进行连接,直至连接n-1次。
核心代码:
五.Prim(普里姆)
思想:
从任意一个点出发,找出距离该点最短的点加入到生成树,接着更新生成树到未在生成树中各个顶点的距离,再找出最小值,直至所有顶点纳入到生成树中。
核心代码: