opbnbjs

最短路优化

写在前面

上次讲了最短路的基础,但是像最短路这种博大精深(坑特别深)的算法。。。是肯定有优化的啦。这一篇是给有最短路基础的人看的,假如没有嘛。。可以看看我以前写的最短路基础

SPFA

我把这个算法挪到这边来写了,原因有两个:第一个是我上次懒得写了。。
第二个是这个算法比较难,所以放在了优化这边一起写,而且它本身就是对贝尔曼福德的优化。
不说废话了,let\'s begin
spfa 算法可以适用于负边权的情况,是 bellman-ford 的队列优化。
假设存在 G=<V,E>,dis[i]记录 V0 到 i 的最短距离,pre[i]记录从 V0 到 i 路径 上 i 的前面的一个顶点;
step1.将所有顶点对之间距离初始化为无穷大(dis[i][j]=无穷大),pre[i]=i, vis[i]=0,将源点入队;
step2.读取队头顶点 now,并将队头顶点 now 出队(记得消除标记),将与点 now 相连的所有点 next 进行松弛操作(还记得吗,上一篇讲过),更新 dis[next],另外,如果点 next 没有 在队列中,那么要将点 next 入队(记得标记),如果已经在队列中了,那么就不 用入队(如果某个顶点入队超过 V 次,则说明图中有负环,直接跳出);
step3.重复 step2,直到队空为止就完成了单源最短路的求解。
这是主要思路。
下面有个图解(无耻的转自某博客)

分类:

技术点:

相关文章:

  • 2021-08-14
  • 2021-08-30
  • 2021-08-30
猜你喜欢
  • 2019-02-16
  • 2020-05-03
  • 2021-03-01
  • 2021-06-06
  • 2021-10-20
  • 2021-06-24
  • 2021-08-05
相关资源
相似解决方案