POJ2502-Subway
http://poj.org/problem?id=2502
好像不是我写的- -?风格略不像啊
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> #define maxn 205 using namespace std; struct Point { double x, y; }point[maxn]; double map[maxn][maxn],subv, walkv; int n; double dist(Point &a,Point &b) { Point p; p.x=a.x-b.x; p.y=a.y-b.y; return sqrt(p.x*p.x+p.y*p.y); } void input() { int i,j; Point last,now; for(i=0;i<2;i++) scanf("%lf%lf",&point[i].x,&point[i].y); n=2; last.x=last.y=-1; while(scanf("%lf%lf",&now.x,&now.y)!=EOF) { if(!(now.x==-1&&now.y==-1)) { point[n++]=now; if(!(last.x==-1&&last.y==-1)) map[n-1][n-2]=map[n-2][n-1]=dist(point[n-1],point[n-2])/subv; } last=now; } for(i=0;i<n;i++) for(j=0;j<n;j++) if(map[i][j]==-1) map[i][j]=dist(point[i],point[j])/walkv; } void floyd() { int i,j,k; for(k=0;k<n;k++) for(i=0;i<n;i++) for(j=0;j<n;j++) map[i][j]=min(map[i][j],map[i][k]+map[k][j]); } int main(void) { int i,j; for(i=0;i<maxn;i++) for(j=0;j<maxn;j++) map[i][j]=-1; subv=40*1000.0/60; walkv=10*1000.0/60; input(); floyd(); printf("%.0f\n",map[0][1]); return 0; }