SPFA:SPFA(Shortest Path Faster Algorithm)(队列优化)算法是求单源最短路径的一种算法,它还有一个重要的功能是判负环(在差分约束系统中会得以体现),在Bellman-ford算法的基础上加上一个队列优化,减少了冗余的松弛操作,是一种高效的最短路算法。
单源最短路径 就是起点固定,求从起点到各个顶点的最短路径。
下面从百度百科中给的图例来解释spfa算法;
不妨设a点为起点即 源;
spfa需要定义的变量:
int start;起点
int n;一共n个点
int d[N]; 源点到点i的最短路
int p[N]; //记录路径(或者说记录前驱)
queue <int> q;队列
bool vis[N];记录点i是否在队列中
算法过程:
初始化:队列q中push起点a;