SPFA(Shortest Path Faster Algorithm)算法,是一种求最短路的算法。
SPFA的思路及写法和BFS有相同的地方,我就举一道例题(洛谷——P3371 【模板】单源最短路径(弱化版)来做讲解吧!
如题:
首先,我们先来定义一波变量吧:
struct node{
int v,w;
node (){
}
node (int _v,int _w){
v=_v;
w=_w;
}//构造函数
};
queue<int>qu;//必备队列
const int inf=0x3f3f3f3f;//最大值
vector<node> g[10010];//邻接表
int inq[10010],dst[10010];//inq为标记此点是否入过队列,以及当前确认的最短路经
int n,m;
然后再来一个存图函数
void add(int u,int v,int w){
g[u].push_back(node(v,w));
}//邻接表存图
好了,基本的变量函数已经准备好了,现在就开始我们的SPFA。
但需要传什么参数进去呢?那就简洁点,就只要一个s(起点)
void spfa(){
}
首先我们来给dst赋一个最大值,方便松弛。
memset(dst,inf,sizeof dst);
初始化起点
int u=s;
dst[u]