//
#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
const int N=111;
int dp[N][N];
int n,m,q;
void init()
{
memset( dp,0x3f,sizeof( dp ) );
for( int i=0;i<=n;i++ ) dp[i][i]=0; // 始终点相同
}
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 a,b,c;
while( cin>>n>>m>>q )
{
init();
while( m-- )
{
cin>>a>>b>>c;
dp[a][b]=min( dp[a][b],c ); // min 防止重边
}
floyd();
while( q-- )
{
cin>>a>>b;
if( dp[a][b]==INF ) cout<<"No solution"<<endl;
else cout<<dp[a][b]<<endl;
}
}
return 0;
}
UJN_最近的路_floyd
猜你喜欢
转载自blog.csdn.net/qq_63173957/article/details/124808959
今日推荐
周排行