当前位置:   article > 正文

Bellman-ford算法图解_贝尔曼福特算法图解

贝尔曼福特算法图解

介绍

Dijkstra算法不同,Bellman-ford能对付有负权重的边,而且可以检测negative cycle.
假设V存的是所有的顶点(vertex),E存的是所有的边(edge),w(u, v)代表顶点u到顶点v的权重,PI[v]存的是从哪一个顶点到顶点v(PI[A]=s表示s->A)
以这幅图为例子。
在这里插入图片描述

伪代码

初始化

在这里插入图片描述

伪代码

for v in V:
	d[v]=INFINITY
	PI[v]=''
d[s]=0
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
在这里插入图片描述

循环

for i in range(1, len(V)): # 从i到len(V)-1
	for w(u,v) in E:
		# relax操作
		if d[v] > d[u] + w(u,v):
			d[v] = d[u] + w(u,v)
			PI[v] = u
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

检查有没有negative-weight cycle

什么是negative-weight cycle?

那种每次循环一遍d[v]都会减少的,循环无数次后,d[v]会趋近于负无穷。
在这里插入图片描述

for w(u,v) in E:
		if d[v] > d[u] + w(u,v):
			return negative_cycle_error
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/710986
推荐阅读
  

闽ICP备14008679号