最短路算法总结

1:dijkstra算法

基于priority_queue的dijkstra算法,适用于边权值非负。每一次queue.top(),是从V-S中取小的u,并加入S中。并以这个点为基础,对新的V-S中的点进行松弛,只要产生dist的改变,该v点必入优先队列,从而产生一个现象:一个点在优先队列中的次数可能不止一次,但每次出队列的必是最小值,且该点加入S,那么接下来如果该点再出队列,只要continue。

将dist[N]扩展到dist[N][2],use[2]扩展到use[N][2],0代表最短路,1代表次短路,则就扩展到了二维dijkstra算法。

推荐的题目:zju1298 poj3463

贴上dijkstra模板:

2.bellman_ford算法

适用于任意边权为实数的图。运用松弛技术,逐步减少从源s到v的最短路径的估计值dist[v],直至达到实际最短路径。如果图中存在负权回路,则算法报告最短路不存在。

推荐题目:poj 3259 poj1860

bellman_ford模板:

 

3.SPFA算法

基于先进先出的SPFA算法,适用于边权为实数的值。只要最短路存在,SPFA必定能求出最小值,因为每次将v放入队尾,都是经过松弛操作达到的,则减少了对d[v]的估计,直至最后的最短路径。稍微修改,加个cnt[],则可以判负环

推荐的题目:poj1511 poj3621

SPFA的模板:

 

4.差分约束系统

下面的博客详细的讲解了差分约束系统

http://imlazy.ycool.com/post.1702305.html

推荐题目:zju1508

讲一些我在做题中的总结:用bellman_ford算法求最短路,得到的就是问题的解,这里也不用关心源点。用SPFA算法,肯定要知道源点,d[v0]=0(隐含的条件),那么有如下注意点:求最短路得问题的最大值,求最长路得问题的最小值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值