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

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

循环

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

检查有没有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
  • 7
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值