C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 210,INF = 1e9;
int n,m,q;
int dis[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)
dis[i][j] = min(dis[i][j] , dis[i][k] + dis[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) dis[i][j] = 0;
else dis[i][j] = INF;
}
}
while(m--){
int a,b,w;
cin >> a >> b >> w;
dis[a][b] = min(dis[a][b],w);
}
floyd();
while(q--){
int a , b;
cin >> a >> b;
if(dis[a][b] > INF / 2 ) cout << "impossible" <<endl;
else cout << dis[a][b] <<endl;
}
return 0;
}
算法2
(暴力枚举) $O(n^2)$
blablabla
时间复杂度
参考文献
C++ 代码
blablabla