人走路的速度是10km/h,地铁的速度是40km/h
题目给出一个起点,一个终点,
以及几条地铁线路运行的站点。
题目给的点的做坐标单位是m
把速度统一为m/min
答案输出从起点到终点的时间,分钟数。
10km/h= 10000/60 m/min
40km/h= 40000/60 m/min
所有的点直接以步行的速度建边。
地铁线路两站相邻的以地铁速度建边
/***********************************************
* Author: fisty
* Created Time: 2015/2/24 20:10:15
* File Name : L.cpp
*********************************************** */
#include <iostream>
#include <cstring>
#include <deque>
#include <cmath>
#include <queue>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <string>
#include <vector>
#include <cstdio>
#include <bitset>
#include <algorithm>
using namespace std;
#define Debug(x) cout << #x << " " << x <<endl
#define Memset(x, a) memset(x, a, sizeof(x))
const int INF = 0x3f3f3f3f;
typedef long long LL;
typedef pair<int, int> P;
#define FOR(i, a, b) for(int i = a;i < b; i++)
#define MAX_N 2520
int n;
double G[MAX_N][MAX_N];
struct Point{
int x;
int y;
}p[MAX_N];
double walk(int i, int j){
double l = sqrt((double)(p[i].x - p[j].x) * (p[i].x - p[j].x) + (double)(p[i].y - p[j].y) * (p[i].y - p[j].y));
return l * 60 / 10000.0;
}
double subway(int i, int j){
double l = sqrt((double)(p[i].x - p[j].x) * (p[i].x - p[j].x) + (double)(p[i].y - p[j].y) * (p[i].y - p[j].y));
return l * 60.0 / 40000.0;
}
void solve(){
for(int k = 1; k <= n; k++){
for(int i = 1;i <= n; i++){
for(int j = 1;j <= n; j++){
G[i][j] = min(G[i][j], G[i][k] + G[k][j]);
}
}
}
}
int main(){
//freopen("in.cpp", "r", stdin);
scanf("%d%d%d%d", &p[1].x, &p[1].y, &p[2].x, &p[2].y);
G[1][2] = G[2][1] = walk(1, 2);
int j = 0;n = 3;
int a, b;
while(scanf("%d%d",&a,&b) != EOF){
if(a == -1 && b == -1)
j = 0;
else{
p[n].x = a, p[n].y = b;
for(int i = 1;i < n - j; i++){
G[i][n] = G[n][i] = walk(i,n);
}
for(int i = n-j; i < n; i++){
G[i][n] = G[n][i] = subway(i,n);
}
j = 1, n++;
}
}
n--;
solve();
printf("%.0f\n", G[1][2]);
return 0;
}