最短路定义
在一个图中有n个点、m条边。边有边权,边权可正可负。边可以有向可以无向。给定起点s,终点t,再学友能连接s和t的路径中寻找边权值之和最小的路径,这就是最短路。
最短路算法
使用bfs求最短路径,最短路径最常用的4个常用算法时Floyd、Bellman-Ford、SPFA、Dijkstra。在不同的场景下使用不同的算法。
- Floyd:图的规模小(n<200),边权允许为负,需要判断负圈。使用邻接矩阵存储。
- Bellman-Ford:图的规模适中(n*m<10^7),边权允许为负,使用邻接表存储。
- Dijkstra:图的规模大,并且边权非负,可使用邻接表和链式前向星存储。
- SPFA:图的规模大,且边权为负,可使用邻接表和链式向前星存储。
算法讲解
详情链接
Floyd
Bellman-Ford
Dijkstra
SPFA