// floyd
#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
const int N=111; // 注意数据范围
int dp[N][N];
int n,m,q;
void floyd()
{
int i,j,k;
for( k=1;k<=n;k++ )
for( i=1;i<=n;i++ )
for( j=1;j<=n;j++ )
dp[i][j]=min( dp[i][j],dp[i][k]+dp[k][j] );
}
int main()
{
int x,y,data,i,j;
while( cin>>n>>m>>q )
{
for( i=0;i<=n;i++ ) // <=
{
for( j=0;j<=n;j++ ) dp[i][j]=INF;
dp[i][i]=0;
}
while( m-- )
{
cin>>x>>y>>data; // 防止重边
dp[x][y]=dp[y][x]=min( dp[x][y],data );
}
floyd(); // lost
while( q-- )
{
cin>>x>>y;
if( dp[x][y]==INF ) cout<<"-1"<<endl;
else cout<<dp[x][y]<<endl;
}
}
return 0;
}
模板_floyd_最短路径
猜你喜欢
转载自blog.csdn.net/qq_63173957/article/details/124972402
今日推荐
周排行