Acwing_854(Floyd求最短路 )

本文介绍了如何利用Floyd算法在给定图中计算多源最短路径,提供了一个C++代码示例,并处理了查询部分。通过三次迭代更新距离矩阵来找到最短路径。
摘要由CSDN通过智能技术生成

原题链接:

854. Floyd求最短路 - AcWing题库

题解:

对于求多源最短路径问题,直接用Floyd算法三个循环暴力求解即可

代码:

#include<bits/stdc++.h>
using namespace std;
const int INF = 1e9;
int n, m, q;
const int N = 2e2 + 10;
int d[N][N];

void floyd() {
	for (int k = 1;k <= n;k++)
		for (int i = 1;i <= n;i++)
			for (int j = 1;j <= n;j++)
				d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
}

int main() {
	cin >> n >> m >> q;

	for (int i = 1;i <= n;i++) {
		for (int j = 1;j <= n;j++) {
			if (i == j) d[i][j] = 0;
			else d[i][j] = INF;
		}
	}

	for (int i = 0;i < m;i++) {
		int x, y, z;cin >> x >> y >> z;
		d[x][y] = min(d[x][y], z);
	}
	floyd();
	while (q--) {
		int x, y;cin >> x >> y;
		if (d[x][y] > INF / 2) cout << "impossible" << endl;
		else cout << d[x][y] << endl;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值