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

UVA 10048 Audiophobia

2012-10-20 21:40 381 查看
大意:给你一个图,以及出发点与起始点,让你求这两者之间的最小的最大权值。

思路:动态规划,Floyd的变形,我理解起来比较困难,关键是我接触动态规划较少。

CODE:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;

#define MAXN 110
#define INF 0X3F3F3F3F
int d[MAXN+10][MAXN+10];
int n, m, q;

void init()
{
for(int i = 1; i <= MAXN; i++)
{
for(int j = 1; j <= MAXN; j++)
{
if(i == j) d[i][j] = 0;
else d[i][j] = INF;
}
}
}

void Floyd()
{
int i, j, k;
for(k = 1; k <= n; k++)
for(i = 1; i <= n; i++)
for(j = 1; j <= n; j++)
d[i][j] = min(d[i][j], max(d[i][k], d[k][j]));
}

int main()
{
int times = 0;
while(scanf("%d%d%d", &n, &m, &q) && ( n || m || q))
{
init();
while(m--)
{
int u, v, cost;
scanf("%d%d%d", &u, &v, &cost);
d[u][v] = d[v][u] = cost;
}
Floyd();
if(times) printf("\n");
printf("Case #%d\n", ++times);
while(q--)
{
int u, v;
scanf("%d%d", &u, &v);
int ans = d[u][v];
if(ans == INF)
{
printf("no path\n");
}
else
{
printf("%d\n", ans);
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: