Acwing算法基础课——图论之spfa算法

适用范围

图论里面另外三个常用算法都是以外国人的名字命名的,我很好奇spfa是什么意思,一去查发现是shortest path faster algorithm,还是我校西南交通大学的老师命名的,哈哈自豪感油然而生。
spfa其实就是用队列对bellman-ford算法进行了优化,因为bellman-ford算法不仅对前一次改变了距离的点进行了遍历,对上一次距离没有变动的点也进行了遍历(这就浪费了时间)。而spfa算法就是在bellman-ford算法的基础上增加了了一个队列,利用队列存储上一次更新了距离的点。
可以适用于单源最短路,权值可以为负的情况下求最短路。

求负环

spfa算法的另外一个作用就是可以求图中是否存在负环
增加一个cnt数组记录每个点到源点的边数,一个点被更新一次就+1,一旦有点的边数达到了n那就证明存在了负环。

AC代码

#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>


using namespace std;

typedef pair<int,int> PII; //记住define不需要 但是typedef需要

const int N=100010;
int n,m;
int e[N],ne[N],w[N],h[N],idx;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值