【Floyd】AcWing854.Floyd求最短路
阿新 • • 發佈:2022-05-29
AcWing854.Floyd求最短路
題解
注意:k, i, j的順序不能改變,必須以k作為橋樑
#include <iostream> #include <cstring> using namespace std; const int N = 210; int g[N][N], n, m, k; int main() { cin >> n >> m >> k; for(int i = 1; i <= n; ++i) for(int j = 1; j <= n; ++j) if(i == j) g[i][j] = 0; //刪去自環,不讓自環成為一條大於0的路徑 else g[i][j] = 0x3f3f3f3f; int a, b, c; for(int i = 0; i < m; ++i) { cin >> a >> b >> c; g[a][b] = min(g[a][b], c); //因為有重邊 } for(int k = 1; k <= n; ++k) for(int i = 1; i <= n; ++i) for(int j = 1; j <= n; ++j) g[i][j] = min(g[i][j], g[i][k] + g[k][j]); for(int i = 0; i < k; ++i) { cin >> a >> b; if(g[a][b] >= 0x3f3f3f3f/2) cout << "impossible" << endl; else cout << g[a][b] << endl; } return 0; }