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

来源:互联网 发布:原油数据接口 编辑:程序博客网 时间:2024/05/22 02:10

    又一个套了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;}



0 0
原创粉丝点击