Dijkstra算法没办法处理带有负权的图,所以这时候就需要Bellman-Ford算法了,在假设途中没有负权回路(回路的权值和为负,即回路中负权的值大于其他几遍的权值和)可以采用Bellman-Ford算法,但是该算法的时间复杂度为O(V*E),效率较低

1.初始化:将除源点外的所有顶点的最短距离估计值 d[v] ——>+∞, d[s]——>0;

2.迭代求解:反复对边集E中的每条边进行松弛操作,使得顶点集V中的每个顶点v的最短距离估计值逐步逼近其最短距离;(运行|v|-1次)

3.检验负权回路:判断边集E中的每一条边的两个端点是否收敛。如果存在未收敛的顶点,则算法返回false,表明问题无解;否则算法返回true,并且从源点可达的顶点v的最短距离保存在 d[v]中。

#include

#include

using namespace std;

const int maxnum=100; //最大边数

const int maxint=9999; //源点和某点不可达时的距离

//有向边的结构体

typedef struct Edge

{

int Start; //有向边边的起始点

int End; //有向边的终点

int Weight;//边的权重

}Edge;

Edge edge[maxnum];//有向边的数组

int dist[maxnum]; //距离数组

//节点的数目、边的数目、源节点的下标

int nodenum,edgenum,source;

//初始化函数

void Init()

{

cin>>nodenum>>edgenum>>source;

for(int i=1;i<=nodenum;i++)

dist[i]=maxint;

dist[source]=0;

for(int i=1;i<=edgenum;i++)

{

cin >> edge[i].Start >> edge[i].End >> edge[i].Weight;

if(source==edge[i].Start)

{

dist[edge[i].End]=edge[i].Weight;

}

}

}

//松弛函数

void Relax(int Start,int End,int Weight)

{

if(dist[End]>dist[Start]+Weight)

dist[End]=dist[Start]+Weight;

}

//贝尔曼福特函数

bool Bellman_Ford()

{

for(int i=1;i<=nodenum-1;i++)

{

for(int j=1;j<=edgenum;j++)

{

Relax(edge[j].Start,edge[j].End,edge[j].Weight);

}

}

bool flag=1;

for(int i=1;i<=edgenum;i++)

{

//判断是否存在负回路

if(dist[edge[i].End]>dist[edge[i].Start]+edge[i].Weight)

{

flag=0;

break;

}

}

return flag;

}

int main()

{

freopen("out.txt","r",stdin);//打开txt

Init();

if(Bellman_Ford())

{

for(int i=1;i

cout<

}

return 0;

}

bellman ford java_Bellman-Ford算法相关推荐

  1. Bellman算法和SPFA算法

    Dijkstra算法比较快速,但是如果遇到负边就无能为力了,而Bellman算法可以解决负边问题,只要不是负环. 这个算法数据结构没有讲过,他主要是每次对所以边进行松弛操作,进行n-1次得到最短路径. ...

  2. Bellman Ford算法详解

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

  3. Bellman-Ford 单源最短路径算法

    Bellman-Ford 单源最短路径算法 Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法.该算法由 R ...

  4. 图论相关算法理解和总结

    晚上学习了一些图论相关算法: 单源最短路径算法: Bellman-Ford 算法: Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shor ...

  5. python算法完整教程专栏完整目录

    python算法完整教程专栏完整目录 专栏说明如下 专栏目录 专栏说明如下 内容:python算法完整教程 数量:692篇博文(2023年2月15日截止) 更新时间至:2023年2月15日(后续加上去 ...

  6. BellmanFord算法与SPFA算法

    Bellman-Ford Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法.该算法由 Richard Be ...

  7. em算法直观_直观地解释了10种图形算法

    em算法直观 重点 (Top highlight) Graphs have become a powerful means of modelling and capturing data in rea ...

  8. 如何理解迪杰斯特拉算法

    路漫漫其修远兮,吾将上下而求索. --屈原 在最短路径的求解算法中,迪杰斯特拉(Dijkstra)算法应该是非常出名的,但是对于初学者而言却又很难理解为什么这个算法是对的,找到的就是最短路径.下面博主 ...

  9. 图--最短路径(四种算法详解)

    最短路径 dijkstra算法 邻接矩阵实现 邻接表实现 最小堆优化 应用:多权值+多路径+路径输出 Floyd算法 Bellman ford算法 SPFA算法 dijkstra算法 单源最短路径算法 ...

  10. 网络知识和交换机的基本配置知识培训

    网络知识和交换机的基本配置知识培训 一.培训目的: 我中心维护维修人员了解基本网络知识,交换机.路由器的基本配置知识. 二.培训人员: 信息处职员. 三.培训方式.方法: 集中现场培训.交换机模拟配置 ...

最新文章

  1. POJ3982 序列
  2. map:map指向最后一个元素?指向第一个元素?
  3. 福建信息技术学院计算机系男生宿舍怎么样,广西职业技术学院宿舍怎么样
  4. shell 杂记一(笨鸟)
  5. 懒惰的JSF Primefaces数据表分页–第1部分
  6. (转)模拟鼠标/键盘
  7. Ubuntu 手动安装JDK
  8. java怎么用doss窗口_GitHub - doss128/symphony: 一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)平台。...
  9. 3DS_MAX渲染笔记
  10. webots python e-puck 集群通信案例
  11. YII composer全局安装
  12. 新辰:传统行业进军互联网 怎样颠覆网络获得新生?
  13. Linux使用过程中的经验积累
  14. 儒略历、儒略日与儒略年原来是鸡同鸭讲
  15. oracle清空回收站指定表,oracle 删除表结构及清空回收站
  16. 陈年再创业:B2C必须标准化 VANCL只做男装
  17. NOIP2017提高组广东省成绩
  18. Pull Request 的概述
  19. Vue 短信验证码组件
  20. elementUI设置标签页

热门文章

  1. blas、lapack、atlas在Ubuntu上的安装
  2. ⑦Java SE知识点回顾与小结(面向对象)
  3. 简述linux的系统组成,简述Linux系统结构
  4. 采用FPGA开发高清相机sensorISP芯片要点分析
  5. 卷积神经网络基础知识五(mobilenet)
  6. OpenCV中的图像基本操作--B站视频教程笔记(四)
  7. Python 中的 sequence 类型
  8. 树莓派 博通BCM2835芯片手册
  9. 高德地图定位 地图比例缩放
  10. 微信小程序通过微信群发消息(订阅消息)