最短路

223 阅读1分钟

最短路定义

在一个图中有n个点、m条边。边有边权,边权可正可负。边可以有向可以无向。给定起点s,终点t,再学友能连接s和t的路径中寻找边权值之和最小的路径,这就是最短路。

最短路算法

使用bfs求最短路径,最短路径最常用的4个常用算法时Floyd、Bellman-Ford、SPFA、Dijkstra。在不同的场景下使用不同的算法。

  1. Floyd:图的规模小(n<200),边权允许为负,需要判断负圈。使用邻接矩阵存储。
  2. Bellman-Ford:图的规模适中(n*m<10^7),边权允许为负,使用邻接表存储。
  3. Dijkstra:图的规模大,并且边权非负,可使用邻接表和链式前向星存储。
  4. SPFA:图的规模大,且边权为负,可使用邻接表和链式向前星存储。

算法讲解

详情链接
Floyd
Bellman-Ford
Dijkstra
SPFA