[ 算法 ] 细说SPFA

前言

单源最短路是 OI 中一个重要的算法,其中最主要的两种算法为 Dijkstra 算法与 SPFA 算法。笔者认为 SPFA 算法的通用性更大,实现更加简洁,使用后文中的优化后效率十分高,且在其他的算法与数据结构中常有涉及(如:最小费用最大流、差分约束系统等),在信息学竞赛中可能被大量使用到。目前网络上 OIer/ACMer 大都倾向于使用 Dijkstra 算法,而时常忽略 SPFA 算法的优势,没能全面了解SPFA算法的实现和优化方法,可能在学习过程中遇到困难。本文将会详尽地提供 SPFA 算法的完整实现、优化与拓展应用等内容。

本文的前置知识:

  1. 基础数据结构与算法
  2. 图的概念,建立、存储、遍历

最短路

定义

给定一张有向带权图 \(G\) ,其中节点以 \([1, n]\) 之间的连续整数编号,求以节点 \(1\) 为起点,到终点 \(n\) 的最短路径的长度

简单来说,就是求一张图中以 \(1\) 为起点,\(n\) 为终点的最短的一条路径的长度,如下图的最短路即为由 \(1\) 为起点,\(8\) 为终点的最短路径:\(1\rightarrow2\rightarrow4\rightarrow8\) ,其路径长度为 \(5+2+1=8\) ,小于图中其余的任何路径(如路径\(1\rightarrow3\rightarrow8\) ,其路径长度为 \(1+9=10\) )。

最短路

单源最短路

给定一张有向带权图 \(G\) ,求其以 \(1\) 为起点,到其余每个点的最短路

Bellman-Ford 算法

猜你喜欢

转载自www.cnblogs.com/zhangtianli/p/13403646.html