Bellman-Ford算法详解

Bellman-Ford算法定义

Bellman-Ford算法就是求解有负边权的单源路径问题。
我觉得这篇pdf挺好理解的Bellman-ford算法

分析:

设起点 start 终点 end
那么由start 到 end ,要想找到最短路,那么它可能会经过k个点,
(k=0,1,2,3…),那么诠释这一思想的核心代码为

for(int k=1; k<=n-1; k++)//1
    for(int i=1 ;i<m ; i++)//2
        if(dis[v[i]] > dis[u[i]] + w[i])//3
            dis[v[i]]=dis[u[i]]+w[i];//4
  /*
1.n为顶点个数
2.m为边的个数
34.相当于松弛操作,u,v用来存顶点权值,w[i]就表示从u[i]到v[i]的边权是w[i]
*/

公式说明,递推
dis1[s]=edge[s][t];//直达边,即是直接连接s到t的那条边
disk[s]=min(disk-1[s],min(disk-1[j]+edge[j][s])//经过k-1个点后,最短路径

图解Bellman-ford算法

在这里插入图片描述

它解决的是负权边的问题,同时保证没有形成负权边回路,它最多进行n-1次松弛
操作,为了保证不形成回路

针对上图,我们设置1号点为起点,2,3,4,5为终点
那么首先起始图
在这里插入图片描述

进入松弛操作前,初始化所有的值为无穷大+∞
在这里插入图片描述
松弛操作后

           1    2    3    4    5
dis1       0    3   -5    ∞    ∞
dis2       0    3   -5    1    -4
dis3       0    2   -5   -1    -4
dis4       0    0   -5   -1    -4
 因为本题共有5个点,所以最多进行5-1=4次松弛操作,得到最小解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值