uva10048 - Audiophobia()

在情急之下做的这道题,很快的按照floyd算法写完代码,结果连样例都不能过。。

以为自己写的代码的问题,就一直找代码的错误,结果没找到错误就结束了。。。。

后来,回头看这道题,,,,才发现自己根本没理解题意,,,

这道题是让求从a到b需要忍受的最小噪音,,

就是说在多条从a到b的路径中,每条路径都要选出它的最大路段,最后在这些路段中选出最小的即可。

然后,对代码来说,,,

只需要对floyd算法稍稍改一下就行了。。。

代码如下:

#include <cstdio>
#include <algorithm>
using namespace std;
#define M 105
#define INF 1000000
int d[M][M];
int n, m, t;
void init()
{
    int a, b, w;
    for(int i = 1; i <= n; i++)
    for(int j = 1; j <= n; j++)
        if(i==j)d[i][j] = 0;
        else d[i][j] = INF;
    for(int i = 0; i < m; i++)
    {
        scanf("%d %d %d",&a,&b,&w);
        d[a][b] = w;
        d[b][a] = w;
    }
}
void floyd()
{
    for(int k = 1; k <= n; k++)
    for(int i = 1; i <= n; i++)
    for(int j = 1; j <= n; j++)
    if(d[i][j]>max(d[i][k],d[k][j]))
        d[i][j] = max(d[i][k],d[k][j]);
}
int main ()
{
    int a, b, tt = 0;
    while(scanf("%d%d%d",&n,&m,&t),n+m+t)
    {
        init();
        floyd();
        if(tt) printf("\n");
        printf("Case #%d\n",++tt);
        for(int i = 0; i < t; i++)
        {
            scanf("%d%d",&a,&b);
            if(a>b) {int te = a; a = b; b = te;}
            if(d[a][b]<INF) printf("%d\n",d[a][b]);
            else printf("no path\n");
        }
    }
    return 0;
}


posted on 2013-05-23 22:45  Primo...  阅读(122)  评论(0编辑  收藏  举报