bellman ford java_Bellman-Ford算法
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算法相关推荐
- Bellman算法和SPFA算法
Dijkstra算法比较快速,但是如果遇到负边就无能为力了,而Bellman算法可以解决负边问题,只要不是负环. 这个算法数据结构没有讲过,他主要是每次对所以边进行松弛操作,进行n-1次得到最短路径. ...
- Bellman Ford算法详解
一.用途 1. Bellman Ford算法是解决拥有负权边最短路问题的方法之一.还有一种方法是SPFA算法. 2. 二者相比,SPFA算法在效率方面是优于Bellman Ford算法的.但在某些情况 ...
- Bellman-Ford 单源最短路径算法
Bellman-Ford 单源最短路径算法 Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法.该算法由 R ...
- 图论相关算法理解和总结
晚上学习了一些图论相关算法: 单源最短路径算法: Bellman-Ford 算法: Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shor ...
- python算法完整教程专栏完整目录
python算法完整教程专栏完整目录 专栏说明如下 专栏目录 专栏说明如下 内容:python算法完整教程 数量:692篇博文(2023年2月15日截止) 更新时间至:2023年2月15日(后续加上去 ...
- BellmanFord算法与SPFA算法
Bellman-Ford Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法.该算法由 Richard Be ...
- em算法直观_直观地解释了10种图形算法
em算法直观 重点 (Top highlight) Graphs have become a powerful means of modelling and capturing data in rea ...
- 如何理解迪杰斯特拉算法
路漫漫其修远兮,吾将上下而求索. --屈原 在最短路径的求解算法中,迪杰斯特拉(Dijkstra)算法应该是非常出名的,但是对于初学者而言却又很难理解为什么这个算法是对的,找到的就是最短路径.下面博主 ...
- 图--最短路径(四种算法详解)
最短路径 dijkstra算法 邻接矩阵实现 邻接表实现 最小堆优化 应用:多权值+多路径+路径输出 Floyd算法 Bellman ford算法 SPFA算法 dijkstra算法 单源最短路径算法 ...
- 网络知识和交换机的基本配置知识培训
网络知识和交换机的基本配置知识培训 一.培训目的: 我中心维护维修人员了解基本网络知识,交换机.路由器的基本配置知识. 二.培训人员: 信息处职员. 三.培训方式.方法: 集中现场培训.交换机模拟配置 ...
最新文章
- POJ3982 序列
- map:map指向最后一个元素?指向第一个元素?
- 福建信息技术学院计算机系男生宿舍怎么样,广西职业技术学院宿舍怎么样
- shell 杂记一(笨鸟)
- 懒惰的JSF Primefaces数据表分页–第1部分
- (转)模拟鼠标/键盘
- Ubuntu 手动安装JDK
- java怎么用doss窗口_GitHub - doss128/symphony: 一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)平台。...
- 3DS_MAX渲染笔记
- webots python e-puck 集群通信案例
- YII composer全局安装
- 新辰:传统行业进军互联网 怎样颠覆网络获得新生?
- Linux使用过程中的经验积累
- 儒略历、儒略日与儒略年原来是鸡同鸭讲
- oracle清空回收站指定表,oracle 删除表结构及清空回收站
- 陈年再创业:B2C必须标准化 VANCL只做男装
- NOIP2017提高组广东省成绩
- Pull Request 的概述
- Vue 短信验证码组件
- elementUI设置标签页