码迷,mamicode.com
首页 > 其他好文 > 详细

neuoj 1128 Choose a Way

时间:2015-08-09 14:11:36      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:

最短路的变形,,,,应该最好用dijstra算法的,,,,我任性的用了Floyd,,,还是过了。。。。时间比较长(不过好写啊!!!!)


核心变形是这步: dis[i][j] = min(dis[i][j], max(dis[i][k], dis[k][j]));



#include<stdio.h>
#include<string.h>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;

int dis[1001][1001];

int main()
{
    int cas;
    int m,n;
    scanf("%d",&cas);
    int t=1;
    while(cas--)
    {
        scanf("%d%d",&n,&m);
        int i,j,k;
        for(i=0;i<=n;i++)
        {
            for(j=0;j<=n;j++)
            {
                if(i==j) dis[i][j]=0;
                else dis[i][j]=999999;
            }
        }

        int u,v,w;
        for(i=0;i<m;i++)
        {
            scanf("%d%d%d",&u,&v,&w);
            if(dis[u][v]!=999999)
            {
                if(dis[u][v]>w)
                {
                    dis[u][v]=w;
                    dis[v][u]=w;
                }
            }
            else
            {
                dis[u][v]=w;
                dis[v][u]=w;
            }
        }
        for ( k=0; k<n;++k)
            for (i=0;i<n; ++i )
                for ( j = 0; j < n; ++j )
                    {
                        dis[i][j] = min(dis[i][j], max(dis[i][k], dis[k][j]));
                    }
    int q;
    scanf("%d",&q);
    printf("Case %d:\n",t++);
    for(i=0;i<n;i++)
    {
        if(dis[i][q]==999999) puts("No way");
        else  printf("%d\n",dis[i][q]);
    }
    }
    return 0;
}



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

neuoj 1128 Choose a Way

标签:

原文地址:http://blog.csdn.net/zhangwenchi/article/details/47375289

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!