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; }