Folyd 多源最短路

目录

简介

实现

代码

关于Floyd的题目


简介

首先我们要知道a到b的最短路是什么

a到b的最短路是从a点到b点的最小距离(花费)

那多源最短路呢就是能求任意a和b,之间的最短路

那么Folyd是多源最短路,也就是求任意a和b,之间的最短路


实现

首先介绍一种术语“松弛

松弛的意思么就是这个点的最短路被更新,可以被一个点更新,也可以被b连着的变更新(dijkstra和bellman-ford和spfa)

那么Floyd的思路是什么呢

  1. 选一个k
  2. 选一个a
  3. 选一个b
  4. 松弛  a->b

欸对了,有的小伙伴猜到了,三重循环!!! 简单吧

好到这里你应该知道代码怎么写了吧

还不会的小伙伴跟我来


代码

#include <iostream>
#include <cstring>

using namespace std;

const int N = 5e2 + 5;

int n, m;
int G[N][N]; //邻接矩阵

void Floyd() {
	for (int k = 1; k <= n; k ++)
		for (int a = 1; a <= n; a ++)
			for (int b = 1; b <= n; b ++)
				G[a][b] = min(G[a][b], G[a][k] + G[k][b]);
}

int main() {
	cin >> n >> m;
	memset(G, 0x3f, sizeof G);
	for (int i = 1; i <= m; i ++) {
		int a, b, c;
		cin >> a >> b >> c;
		G[a][b] = c; // a到b 距离为c
	}

	for (int i = 1; i <= n; i ++)
		G[i][i] = 0;//自己到自己为0

	Floyd();

//	for (int i = 1; i <= n; i ++) {
//		for (int j = 1; j <= n; j ++)
//			cout << G[i][j] << ' ';
//		cout << '\n';
//	}
	int a, b;
	cin >> a >> b;
	cout << G[a][b];
	return 0;
}

关于Floyd的题目

一本通1342

洛谷 模板

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值