模板_floyd_最短路径

// 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;
}

猜你喜欢

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