bellmen-ford算法,与dijkstra不同,bellman-ford可以运用于有负权值的图,不过复杂度很高,O(N*M )… 慎用~(可以用SPFA,它bwllman-ford的扩展)
Bellman-ford算法同样是对每条边进行N-1次松弛,当有权值为负时,对所有边进行N-1次松弛,如果dis还能更新,说明有负环。
ps:名词解释【负环】 在一个图里每条边都有一个权值(有正有负)
如果存在一个环(从某个点出发又回到自己的路径),而且这个环上所有权值之和是负数,那这就是一个负权环,也叫负权回路
存在负权回路的图是不能求两点间最短路的,因为只要在负权回路上不断兜圈子,所得的最短路长度可以任意小。
Bellman-ford原理:
1.如果最短路存在,则每个顶点最多经过一次,因此不超过n-1条边;
2.长度为k的路由长度为k-1的路加一条边得到;
3.由最优性原理,只需依次考虑长度为1,2,…,k-1的最短路。

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
int inf=0x3f3f3f3f;
int main()
{int i,k,n,m;int u[10],v[10],w[10],dis[10];scanf("%d%d",&n,&m);for(i=1; i<=n; i++)scanf("%d%d%d",&u[i],&v[i],&w[i]); for(i=0; i<=n; i++)dis[i]=inf;dis[1]=0;int flag;for(k=1; k<n; k++){flag=0; //标记dis数组会不会变化//进行一轮松弛for(i=1; i<=m; i++){if(dis[v[i]]>dis[u[i]]+w[i]) //表示u[i]->v[i]这条边的值+1号顶点到u[i]点的值是否小于原来1号顶点到u[i]点的值{dis[v[i]]=dis[u[i]]+w[i];flag=1;//dis数组更新}}if(flag==0) break; //表示数组松弛完毕}flag=0; //检验是否会出现负环for(i=1; i<=m; i++)if(dis[v[i]]>dis[u[i]]+w[i]) flag=1; //若还能松弛则存在负环if(flag==0){for(i=1; i<=n; i++)printf("%d ",dis[i]);printf("\n");}elseprintf("此图存在负环回路\n");return 0;
}

Bellman-Ford 算法往往不到n-1轮就已经松弛完毕,用标记变量可以减少循环次数。
在这个算法中加入队列进行优化就是SPFA算法,等看懂了在写一下。

Bellman-Ford(最短路)相关推荐

  1. SPFA or bellman ford松弛法--单源最短路

    问题概述:有编号1-n的n个站点,有m条公交车路线,公交车只从一个起点站直接到达终点站,是单向的且每条路线有它自己的车费,有P个人早上从1出发,他们要到达每一个公交站点,然后到了晚上再返回点1,求所有 ...

  2. bellman ford 算法 判断是否存在负环

    Flyer 目录视图 摘要视图 订阅 微信小程序实战项目--点餐系统        程序员11月书讯,评论得书啦        Get IT技能知识库,50个领域一键直达 关闭 bellman for ...

  3. bellman - ford算法c++

    (最短路III)bellman - ford算法(适用于含负权边的图) 注意:用该算法求最短路,在有边数限制的情况下可以存在负权回路!且对所走的边的数量有要求时只能用该算法实现! 解析:因为如果没有边 ...

  4. Bellman Ford算法详解

    一.用途 1. Bellman Ford算法是解决拥有负权边最短路问题的方法之一.还有一种方法是SPFA算法. 2. 二者相比,SPFA算法在效率方面是优于Bellman Ford算法的.但在某些情况 ...

  5. 图解Bellman Ford算法

    Bellman Ford 单源最短路径算法[中字] Bellman Ford 单源最短路径算法[中字]_哔哩哔哩_bilibili 贝尔曼-福特算法(Bellman–Ford algorithm )油 ...

  6. LeetCode 787. K 站中转内最便宜的航班(图/Bellman Ford算法)

    文章目录 贝尔曼-福特算法(Bellman-Ford) 简介 算法思想 算法执行过程 应用 题目描述 分析 代码 LeetCode 787. K 站中转内最便宜的航班 题目描述 Bellman For ...

  7. Bellman ford算法(贝尔曼·福特算法)

    Bellman - ford算法是求含负权图的单源最短路径的一种算法,效率较低,代码难度较小.其原理为连续进行松弛,在每次松弛时把每条边都更新一下,若在n-1次松弛后还能更新,则说明图中有负环,因此无 ...

  8. C++实现bellman ford贝尔曼-福特算法(最短路径)(附完整源码)

    C++实现bellman ford贝尔曼-福特算法 实现bellman ford贝尔曼-福特算法的完整源码(定义,实现,main函数测试) 实现bellman ford贝尔曼-福特算法的完整源码(定义 ...

  9. Bellman——Ford算法

    Bellman--Ford 算法介绍 思路讲解 案例分析与代码实现 案例分析 代码实现 优先队列优化(SPFA) 优化原理 代码实现 算法介绍 我们知道Dijkstra算法只能用来解决正权图的单源最短 ...

  10. bellman ford 算法

    Dijkstra算法是处理单源最短路径的有效算法,但它局限于边的权值非负的情况,若图中出现权值为负的边,Dijkstra算法就会失效,求出的最短路径就可能是错的.这时候,就需要使用其他的算法来求解最短 ...

最新文章

  1. 设置VSCode运行任务命令快捷键Alt+R,通常用于npm start(对频繁使用该命令可节省50%的输入命令行打字时间)
  2. 联手小米,雀巢中国推出健康管家Nesfinity,满足个性化生活需求管理
  3. 优先级调度和运行前调度的比较
  4. 无源定位之时差估计的精确时差估计算法(ETDE)及MATLAB实现程序
  5. BZOJ3091: 城市旅行
  6. php curl 批量,PHP实现的curl批量请求操作
  7. 技术回归本位:海尔引领空调产业重构格局
  8. vm 虚拟机 删除 权限_虚拟机win7一键傻瓜式安装
  9. 有关Data Input类组件的研究——Silverlight学习笔记[26]
  10. error: exception handling disabled, use -fexceptions to enable
  11. angularJs模版注入的两种方式
  12. unity商店创建开发者账户
  13. 华为云人脸识别服务 FRS 之初体验
  14. 【最新最详细】SQL Server 2019 安装教程{超详细 附网盘下载链接}
  15. HTML期末作业-我的大学生活
  16. 视频号如何做出美食爆款视频,美食类爆款技巧
  17. 零基础C语言入门001——编译器下载
  18. RANSAC和SAC-IA
  19. 中国博客网告别免费午餐 用户数据清除延至7月1日
  20. 面试积累(java配置环境变量)

热门文章

  1. 计算机sql查询同行并集,SQL查询交集、并集、差集
  2. 四巫日来临本周硅铁、铁矿石领跌,铁矿石认沽最高31倍,钢厂利润回升2022.6.17
  3. 垃圾小白羊leetcode刷题记录3
  4. C# 利用AEC算法加密解密实现前台后台安全校验,附前端后台代码示例
  5. SecureCRT注册机使用方法
  6. 如何安装iOS 13 、 macOS Catalina 、watchOS 6 、 tvOS 13 或 iPadOS Beta
  7. springboot+mybatis打包时,单元测试类报错
  8. 通知与服务——服务Service——服务的绑定与解绑延迟绑定服务与解绑服务
  9. Linux怎么同步另一台设备的时间
  10. java8判断当前时间是否大于某个时间