UJN_最近的路_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 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;
}

猜你喜欢

转载自blog.csdn.net/qq_63173957/article/details/124808959