当前位置: 首页 > news >正文

最短路径:Bellman-Ford算法

Bellman-Ford的操作步骤

1.初始化距离:将起点的dist值设置为0,其他点的dist值设置为无穷大。

2.执行n-1轮松弛操作:遍历所有边,更新最短距离,收敛后可获得最短路径。

3.检测负权环:额外遍历一次,若还可以进行更新,则说明图中存在负权环。

Bellman-Ford的代码实现

#include<iostream>
#include<cstring>
using namespace std;
int n, m;
int dist[105];
int s;
struct edge {
	int a, b, w;
}e[10005];
void ford() {//可以判断负边权回路
	int x, y, w;
	int flag = 0;
	for (int i = 1; i <= n - 1; i++) {//循环到n flag为1 负权环回路
		flag = 0;
		for (int j = 0; j < m; j++) {
			x = e[j].a;
			y = e[j].b;
			w = e[j].w;
			if (dist[x] + w < dist[y]) {
				dist[y] = dist[x] + w;
				flag = 1;
			} 
		}
		if (flag == 0) {
			break;
		}
	}
}
int main() {
	cin >> n >> m;
	for (int i = 0; i < m; i++) {
		cin >> e[i].a >> e[i].b >> e[i].w;
	}
	cin >> s;
	memset(dist, 0x3f, sizeof(dist));
	dist[s] = 0;//起点到自己距离为0
	ford();
	for (int i = 1; i <= n; i++) {
		cout << dist[i] << " ";
	}
	return 0;
}

Bellman-Ford算法的作用与分析

根据代码可知,该算法的时间复杂度为O(n*m),它能用来判断负权环的存在,同时也能处理负边权。

http://www.dtcms.com/a/107851.html

相关文章:

  • 抽象类与接口:特征与比较
  • 【实用技巧】电脑重装后的Office下载和设置
  • 自动化测试(web测试)
  • vue-系统登录后进入页面【el-input】输入框无法正常显示?需要手动刷新才可以恢复设置样式?让我来瞅瞅~
  • 关于 UPDATE 语句 和 SELECT ... FOR UPDATE 的对比分析,包括语法、功能、锁机制、使用场景及示例代码
  • java知识梳理(二)
  • 【电子通识】为什么电子元件的规格书常常要看英文版本
  • 从 Credit Metrics 到 CPV:现代信用风险模型的进化与挑战
  • Windows家庭版如何开启Hyper-V与关闭Hyper-V
  • 面试常考简单操作
  • ADS7822中文技术手册
  • Burp靶场 - HTTP走私请求【Part2】
  • Elasticsearch collapse 的使用场景及作用机制
  • Linux驱动开发实战(十一):GPIO子系统深度解析与RGB LED驱动实践
  • es 集群存储字典 json字段----python实现
  • Conda安装ffmpeg
  • idea查看class字节码
  • Java高频面试题1:Java SE
  • SpaceX星舰商业载人首绕月球:私人太空旅行时代正式开启
  • mycat --分片规则--
  • [Android] 共生地球 v1.1.19 国产卫星地图
  • 详细介绍一下C++中的extern关键字
  • 搭建qemu环境
  • 【pcdet3D检测】——OPenpcdet如何进行测试文件配置?能否自定义测试数据?一文看懂pointpillar(pcdet)中的test.py
  • redis7.0搭建redis-cluster集群部署实战
  • AquaMoon and Chess_CodeForces - 1545B
  • AI前沿:资本狂潮下的技术暗战:巨头博弈、开源革命与生态重构
  • Java项目之基于ssm的简易版营业厅宽带系统(源码+文档)
  • Ubuntu 使用apt安装MySQL后的升级方法
  • Share02-小小脚本大大能量