HDU - 1874 - 畅通工程续(最短路,Floyd,图论基础题)

    又一个套了FLOYD的模板题 = = 感觉已经可以十分钟敲一个模板了。没啥好说的。

    注意的坑就是  是否重边,开始与终点是否一致。

    简单粗暴十分钟over =  =  

  (前提如果我么有在输入数据的时候手残多敲了一个百分号..导致自己在循环里面的数据调试了十多分钟的话,说多了都是泪啊快哭了

31ms 搓搓代码(现在不能再用FLOYD了诶..懒懒的,要用dijsktra 把这些基础题再滚一次 = =


/*
 * HDU - 1874 - 畅通工程续 - 最短路
 */

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cctype>
#include<cmath>
using namespace std;

const int MAXN = 200+5;
const int INF = 1<<27;
int path[MAXN][MAXN];
int maxi;

void Floyd(int &n)
{
    for( int k = 0; k <= maxi ;++k )
        for( int i = 0; i <= maxi ;++i )

            if( path[i][k]!=INF )//优化 减少次数
                for( int j = 0; j <= maxi ;++j)
                {
                    if( path[i][j] > path[i][k] +path[k][j])
                        path[i][j] = path[i][k] +path[k][j];

                }

}
int main()
{
 // freopen("in.txt","r",stdin);

    int n,m;
    int s,t;
    while ( ~scanf("%d%d",&n,&m) )
    {
        for( int i = 0;  i < MAXN ; ++i )
            for( int j = 0; j < MAXN ; ++j)
                path[i][j] = INF;

        int a,b,link;
        maxi  = 0;
        for( int i = 0; i < m ;++i)
        {

            scanf("%d%d%d",&a,&b,&link);
            path[a][b] = path[b][a] = min(path[a][b],link);//重边
            maxi = max( a,max(b,maxi));
           // cout<<"该道路的长度:"<<path[a][b]<<endl;
        }

        scanf("%d %d",&s,&t);
        
        if(s==t)puts("0");//开始与起点是否一致
        else
            {
                Floyd(n);

                if( path[s][t] != INF )printf("%d\n",path[s][t]);
                else puts("-1");
            }

    }

    return 0;
}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值