今天复习了一下spfa算法吧。
稠密图单源无负权最短路:Dijkstra。
稠密图单源有负权最短路:SPFA。
稀疏图单源最短路:SPFA或Bellman-Ford。
多源无负权最短路:Floyd。
多源无权最短路:宽搜。
解决问题根节点到各个节点最短距离
方法从根节点起找出其子节点并且更新子节点与根节点的最短距离
参考博客:https://www.cnblogs.com/TFLS-gzr/p/10387463.html
SPFA 适用于存在负值和正值的单源最小路径在小数据方面比迪斯科算法好,但是在特殊数据比如节点值递减,菊花型结构极易被卡稳定性差
时间的复杂度实际上不确定大概在(n-VE)之间
int dis[10005];
int main()
{
memset(dis,0x3f3f3f3f,sizeof(dis));
while(!q.empty())
{
int k=q.front();q.pop();
vis[k]=0;//标记不在队列中
//LLL优化 if(dis[k]*n_n>sum){q.push(k);continue;}else {sum-=dis[k],n_n--;}
for(int i=1;i<=n;i++)
{
if(dis[i]<dis[k]+a[k].dis)
{dis[i]=dis[k]+a[k].dis;
if(!vis[i]){
//LLL优化 sum+=dis[i];
//n_n++;
q.push(i);
vis[i]=1;
}
//SLF优化if(q.empty()||dis[i]<dis[q.front()])q.pushfront(i);//注意q是deque
//else q.push_back(i);
}
}
//都优化的话写在一起并不冲突
}