如果大家想要了解Floyd算法思想可以看这篇博文
题目描述:
Floyd 算法模板:
初始化:
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;
// 算法结束后,d[a][b]表示a到b的最短距离
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]);
}
作者:yxc
链接:https://www.acwing.com/blog/content/405/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
AC代码:
#include<bits/stdc++.h>
using namespace std;
const int N=210,INF=1e9;
int n,m,k,x,y,z;
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>>k;
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;
while(m--){
cin>>x>>y>>z;
d[x][y]=min(d[x][y],z);
}
floyd();
while(k--){
cin>>x>>y;
if(d[x][y]>INF/2) puts("impossible");
else cout<<d[x][y]<<endl;
}
return 0;
}