为防止广告,目前nocow只有登录用户能够创建新页面。如要创建页面请先登录/注册(新用户需要等待1个小时才能正常使用该功能)。

Bellman-Ford算法

来自NOCOW
跳转到: 导航, 搜索

目录

适用条件&范围

  1. 单源最短路径(从源点s到其它所有顶点v);
  2. 有向图&无向图(无向图可以看作(u,v),(v,u)同属于边集E的有向图);
  3. 边权可正可负(如有负权回路输出错误提示);
  4. 差分约束系统;

算法描述

  1. 对每条边进行|V|-1次Relax操作;
  2. 如果存在(u,v)∈E使得dis[u]+w<dis[v],则存在负权回路;否则dis[v]即为s到v的最短距离,pre[v]为前驱。
For i:=1 to |V|-1 do //v为顶点数
For 每条边(u,v)∈E do  //对每条边进行遍历
  Relax(u,v,w);
For每条边(u,v)∈E do
  If dis[u]+w<dis[v] Then Exit(False)

时空复杂度

算法时间复杂度O(VE)。因为算法简单,适用范围又广,虽然复杂度稍高,仍不失为一个很实用的算法。

改进和优化

SPFA

参考代码

PASCAL

Matlab

练习

引用&参考

  • 菜鱼《图论总结》


链接

个人工具