您的位置:首页 > 其它

UVA 1001 Say Cheese——最短路

2018-03-04 16:14 375 查看
不用求传递闭包,没有这样的数据#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int maxn = 110;
const int INF = 0x3f3f3f3f;
int kase = 0, n;
double dp[maxn][maxn];
struct Circle { int x, y, z, r; } c[maxn];
double dis(int i, int j) {
return sqrt(1.0*(c[i].x-c[j].x)*(c[i].x-c[j].x)+1.0*(c[i].y-c[j].y)*(c[i].y-c[j].y)+1.0*(c[i].z-c[j].z)*(c[i].z-c[j].z));
}
int main() {
while (~scanf("%d", &n) && ~n) {
for (int i = 1; i <= n; i++) scanf("%d %d %d %d", &c[i].x, &c[i].y, &c[i].z, &c[i].r);
scanf("%d %d %d", &c[n+1].x, &c[n+1].y, &c[n+1].z); c[n+1].r = 0;
scanf("%d %d %d", &c[n+2].x, &c[n+2].y, &c[n+2].z); c[n+2].r = 0;
for (int i = 1; i <= n+2; i++) {
for (int j = 1; j <= i; j++) {
dp[i][j] = dp[j][i] = max(0.0, dis(i, j)-c[i].r-c[j].r);
}
}
for (int k = 1; k <= n+2; k++) {
for (int i = 1; i <= n + 2; i++) {
for (int j = 1; j <= n+2; j++) {
dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j]);
}
}
}
printf("Cheese %d: Travel time = %d sec\n", ++kase, (int)(dp[n+1][n+2]*10+0.5));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: