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

最短路径--SPFA算法

SPFA算法的引入

实际上,SPFA算法其实是对Bellman-Ford算法的优化,它通过队列这种数据结构,使得在松弛操作时不会去遍历无关的边。

SPFA算法的代码实现

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
typedef pair<int, int> PII;
int n, m, cnt;
int dis[105];
int vis[105];
int s;
int head[105];
int use[105];
struct edge {
	int to, next, w;
}e[10005];
void add(int x, int y, int w) {
	e[cnt].to = y;
	e[cnt].w = w;
	e[cnt].next = head[x];
	head[x] = cnt;
	cnt++;
}
void SPFA() {
	queue<int>q;
	memset(dis, 0x3f, sizeof(dis));
	dis[s] = 0;
	q.push(s);
	use[s]++;
	vis[s] = 1;//标记s是否入队
	while (!q.empty()) {
		int u = q.front();
		q.pop();
		vis[u] = 0;
		for (int i = head[u]; i != -1; i = e[i].next) {
			int v = e[i].to;
			if (vis[v]==0&&dis[v] > dis[u] + e[i].w) {
				dis[v] = dis[u] + e[i].w;
				q.push(v);
				vis[v] = 1;
				use[v]++;//大于等于n说明存在负环
			}
		}
	}
}
int main() {
	cin >> n >> m >> s;
	int x, y, w;
	memset(head, -1, sizeof(head));
	for (int i = 1; i <= m; i++) {
		cin >> x >> y >> w;
		add(x, y, w);
	}
	SPFA();
	for (int i = 1; i <= n; i++) {
		cout << dis[i] << " ";
	}
	return 0;
}
/*
5 5 1
2 3 2
1 2 -3
1 5 5
4 5 2
3 4 3
*/

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

相关文章:

  • 软考中级网络工程师第十一章网络管理
  • Winform MQTT客户端连接方式
  • 力扣268.丢失的数字
  • 树莓派超全系列文档--(16)无需交互使用raspi-config工具其三
  • 【微知】ARM CPU是如何获取某个进程的页表的?(通过TTBR寄存器,MMU进行处理)
  • 基于javaweb的SSM+Maven校园共享自行车管理系统设计与实现(源码+文档+部署讲解)
  • 基于策略模式的CATIA元素显隐控制工具开发实践——PySide6与PyCATIA深度整合方案
  • 什么是PID控制?
  • FFmpeg命令详解
  • 波动率 计算学习 离散系数
  • 【JavaScript】十四、轮播图
  • 探索Ark-TS语言:什么是Ark-TS?如何入门?有什么基础容易上手?
  • 系统分析师备考启动
  • HashMap底层采用数组+链表而非数组+数组的设计,主要基于以下原因及两者的对比:
  • docker安装ngnix
  • diffusion-vas 提升遮挡区域的分割精度
  • openEuler24.03 LTS下安装Flume
  • 动态规划:第一弹(第N个泰波那契数列、使用最小花费爬楼梯、解码方法)
  • AI安全:构建负责任且可靠的系统
  • leetcode287.寻找重复数
  • 【开发问题记录】回流(Reflow) 和 重绘(Repaint)
  • C++的UDP连接解析域名地址错误
  • React PDF 预览终极优化:30 页大文件不卡,加载快如闪电!
  • 【机器学习】嘿马机器学习(算法篇)第14篇:决策树算法,学习目标【附代码文档】
  • Bigemap手机app数据照片同步至电脑教程
  • 数据结构初阶:二叉树的前中后序三种遍历(递归的暴力美学)
  • 3D意识(3D Awareness)浅析
  • 【Spring Boot 与 Spring Cloud 深度 Mape 之一】剖析 Spring Boot 核心:从快速构建到自动配置原理与实战
  • 零基础 LangGraph 多智能体开发
  • 使用mysqldump进行远程mysql本地定时备份