您的位置:首页 > 其它

uva 10803(最短路径)

2014-06-16 00:32 253 查看
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1744

题意:给出一堆坐标,然后如果两个坐标之间距离大于10就看做无穷远,否则可以连通,如果最后是一个连通图,就输出连通路线的最大值(保留小数点后四位),否则输出Send Kurdy, Floyd算法适用。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int N = 110;
const int INF = 0x3f3f3f3f;
int x
, y
, n;
double g

, ans;
void floyd(){
for (int k = 0; k < n; k++)
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
g[i][j] = min(g[i][j], g[i][k] + g[k][j]);
ans = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
ans = max(ans, g[i][j]);
}
int main(){
int cases, num = 1;
scanf("%d", &cases);
while (cases--){
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d%d", &x[i], &y[i]);
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++){
double tmp = sqrt((x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]));
if (tmp > 10.0)
g[i][j] = INF;
else
g[i][j] = tmp;
}
floyd();
printf("Case #%d:\n", num++);
if (ans == INF)
printf("Send Kurdy\n");
else
printf("%.4lf\n", ans);
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  最短路径