您的位置:首页 > 运维架构

uva10048 - Audiophobia()

2013-05-23 22:45 351 查看
在情急之下做的这道题,很快的按照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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: