一、最短路径
最短路径:从图中的某个顶点出发到达另外一个顶点的所经过的边的权重和最小的一条路径。
求最短路径的四个算法如下:
二、算法概述
【Dijkstra算法】
单源最短路:从单个源点出发,到所有结点的最短路
作用:计算正权图上的单源最短路。
图类型:有向图、无向图。
限制:边权为正。
【Bellman-Ford算法】
事实1:当负权存在时,连最短路都不一定存在。
事实2:如果最短路存在,一定存在一个不含环的最短路。
作用:计算图上的单源最短路(前提是最短路存在)。
图类型:有向图、无向图。
优势:边权可为负。
【Floyd算法】
作用:求出每两点之间的最短路。
图类型:有向图、无向图。
特点:如果要用Dijkstra或Bellman-ford求出每两点之间的最短路,那么需要调用n次Dijkstra(边权均为正)或者Bellman-ford(有负权)。
三、负权问题
如果一个图仅仅是存在负权,但不构成负权回路,又该如何?
Dijkstra 算法
观察上图,若 A 作为源点,在第一轮循环后,B 被标记数组标记,但我们发现在第二轮循环中,B 还可以通过 C 点继续进行更新。由此,可以得出结论:Dijkstra 算法不适用于负权图。</