题解(包AC)
2025-07-02 09:45:41
发布于:江苏
9阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int N = 210;
int dis[N][N];
int main() {
int n, m, K;
cin >> n >> m >> K;
// 初始化邻接矩阵
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
if (i == j) dis[i][j] = 0;
else dis[i][j] = INF;
}
}
// 读取边
for (int i = 1; i <= m; ++i) {
int x, y, z;
cin >> x >> y >> z;
dis[x][y] = z;
}
// Floyd-Warshall 算法
for (int k = 1; k <= n; ++k)
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j)
if (dis[i][k] != INF && dis[k][j] != INF)
dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
// 处理查询
while (K--) {
int a, b;
cin >> a >> b;
if (dis[a][b] == INF) cout << "impossible" << endl;
else cout << dis[a][b] << endl;
}
return 0;
}
这里空空如也
有帮助,赞一个