short-path problem (Floyd) 分类: ACM TYPE 2014-09-01 23:58 100人阅读 评论(0) 收藏

时间:2022-06-15 19:39:10

#include <cstdio>
#include <iostream>
#include <cstring>

using namespace std;
const int INF = 0x3fffffff;

int  g[1005][1005];
int m;

void Floyd()
{
    int i, j, k;
     for (k=1;k<=m;k++)
    {
        for (i=1;i<=m;i++)
        {
            for (j=1;j<=m;j++)
            {
                if (g[i][j]>g[i][k]+g[k][j])
                {
                    g[i][j]=g[i][k]+g[k][j];
                }
            }
        }
    }
}


int main()
{
    int T, a, b, len;
    int s, t, p;
    scanf("%d", &T);
    while(T--)
    {
        scanf("%d%d", &m, &p);
        scanf("%d%d",&s,&t);
        for(int i = 1; i <= m; ++i)
            for(int j = 1; j < i; ++j)
                g[i][j] = g[j][i] = INF;

        while(p--)
        {
            scanf("%d%d%d", &a, &b, &len);
            if(g[a][b] > len)
                g[a][b] = g[b][a] = len;
        }
        Floyd();
        printf("%d\n", g[s][t]);
    }
    return 0;
}



版权声明:本文为博主原创文章,未经博主允许不得转载。