SPFA算法
每次将点放入队尾,都是经过松弛操作达到的。换言之,每次的优化将会有某个点v的最短路径估计值d[v]变小。所以算法的执行会使d越来越小。
SPFA核心思想:如果一个点上次没有被松弛过,那么下次就不会从这个点开始松弛。每次把被松弛过的点加入到队列中,就可以忽略掉没有被松弛过的点。
而且SPFA相比Dijkstra算法还有个优势:可以处理负权图和判负环,判负环只需要再加一个if和统计入队次数的num数组即可(注释部分)
void spfa(int s) {
memset(dis, 0x3f3f, siz.
原创
2020-08-23 09:54:18 ·
126 阅读 ·
0 评论