贝尔曼福特算法

贝尔曼福特算法用于寻找图中各点到指定顶点的最短路径,尤其适用于存在负权重的情况。算法包括初始化所有节点距离为无穷大,然后进行最多n-1次松弛操作更新最短路径。如果在遍历结束后仍有距离减小,说明存在负权环。文中通过例题和代码解释了如何使用该算法,并指出在没有负权边的情况下,Dijkstra算法也可作为选择。
摘要由CSDN通过智能技术生成

一、贝尔曼福特算法是在图中找各点距离顶点的最短路径,与Dijkstra不同的是,贝尔曼福特算法的边权可以为负数,而且贝尔曼福特算法除寻找最短路径之外还可以检测边权是否为负

二、①初始化图上所有点(除顶点外)到顶点的距离为无穷大(∞)顶点设为0

       ②最多进行n-1次操作(有可能更少),对各边进行松弛

          松弛解释:

                            如图已知从5到1有两条路径1->3->5或 1->3->4->5,然而1->3->5的长度为                              2+4=6,1->3->4->5的长度为2+1+2=5,1->3->4->5的长度较小,所以从5到1的最短距离为5

三、若要检测边权是否为负,只需遍历完之后,再遍历一遍,若顶点到节点的距离变为更小值,则边权存在负数

例题:

1378:最短路径(shopth)


时间限制: 1000 ms         内存限制: 65536 KB
提交数: 7409     通过数: 3041

【题目描述】

给出一个有向图G=(V, E),和一个源点v0∈V,请写一个程序输出v0和图G中其它顶点的最短路径。只要所有的有向环权值和都是正的,我们就允许图的边有负值。顶点的标号从1到n(n为图G的顶点数)。

【输入】

第1行:一个正数n(2≤n≤80),表示图G的顶点总数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值