poj2502 subway dijkstra
2016-05-26 10:11
260 查看
题目大意:
一个人从家到学校,可以走路,可以坐地铁,走路速度10km/h,地铁速度40km/h,假设没有等地铁时间,那么最少多少分钟能到学校呢?
输入的格式是:
第一行四个数,分别是家和学校的坐标。
后面直到输入结束(EOF)之前都是每行一个地铁线路,地铁线路中每一站都是一个坐标,直到两个-1为止这一条地铁线路结束。
因为在路程相同的情况下,坐地铁的速度是走路的4倍,所以就不是很好计算路程再求得时间。
但可以用路程/速度得到时间,直接求最短时间。
注意两站之间的地铁线路是直的!!!其他站之间线路不一定是直的!!!
还要注意输入的数值单位是米,不是千米,计算出结果的单位是分钟,不是小时,可以用50/3的进率来转换。
一个人从家到学校,可以走路,可以坐地铁,走路速度10km/h,地铁速度40km/h,假设没有等地铁时间,那么最少多少分钟能到学校呢?
输入的格式是:
第一行四个数,分别是家和学校的坐标。
后面直到输入结束(EOF)之前都是每行一个地铁线路,地铁线路中每一站都是一个坐标,直到两个-1为止这一条地铁线路结束。
因为在路程相同的情况下,坐地铁的速度是走路的4倍,所以就不是很好计算路程再求得时间。
但可以用路程/速度得到时间,直接求最短时间。
注意两站之间的地铁线路是直的!!!其他站之间线路不一定是直的!!!
还要注意输入的数值单位是米,不是千米,计算出结果的单位是分钟,不是小时,可以用50/3的进率来转换。
#include<iostream> #include<algorithm> #include<cmath> #include<cstdio> #define xh(a,b,c)for(int a=b;a<=c;a++) #define dxh(a,b,c)for(int a=b;a>=c;a--) using namespace std; const int M=210,inf=1000000000; double t[M][M],d[M]; int s[M]; struct sta{ int x,y; sta(int a=0,int b=0){ x=a,y=b; } }; sta a[M]; double jl(sta x,sta y){//如果直接是int的话,用sqrt会在C++编译器 CE,但g++不会。所以要强制转换成double型再sqrt。 return sqrt((double)((x.x-y.x)*(x.x-y.x)+(x.y-y.y)*(x.y-y.y))); } int main(){ int x,y,x1,y1,n=1; cin>>a[1].x>>a[1].y>>x>>y; while(cin>>x1>>y1){ a[++n]=sta(x1,y1);//输入一个放进去一个 while(cin>>x1>>y1&&x1!=-1&&y1!=-1){ a[++n]=sta(x1,y1); t[n-1] =t [n-1]=jl(a ,a[n-1])*60/40000;//直接转换成分钟数,并且相邻两个站一定是坐地铁快,但是不相邻的就不一定了 } } a[++n]=sta(x,y);//学校是最后一个站 xh(i,1,n-1) xh(j,i,n){ double cd=jl(a[i],a[j])*60/10000;//其他路程按走路算 if(fabs(t[i][j])<=zs){ t[i][j]=t[j][i]=cd; } else t[i][j]=t[j][i]=min(t[i][j],cd); } xh(i,2,n)d[i]=inf;//接下来是重点:dijkstra操作 d[1]=0; xh(i,1,n){ int k=0; double minx=inf; xh(j,1,n){ if(!s[j]&&d[j]<minx){ minx=d[j]; k=j; } } s[k]=1; xh(j,1,n){ if(!s[j]&&t[k][j]>=zs&&d[j]>d[k]+t[k][j]){ d[j]=d[k]+t[k][j]; } } } printf("%.0lf\n",d );//输出保留整数 return 0; }
相关文章推荐
- 跳转appStore评分
- hdu 2685(数论相关定理+欧几里德定理+快速取模)
- 【前端】制作一个handlebars的jQuery插件
- Activity的启动模式
- Android判断GPS是否开启和强制帮用户打开GPS
- Android Dev Intro - Opengl ES 2.0 Render Stranges
- rsync+inotify实现实时同步
- JavaWEB之Filter的应用场景(2)
- matlab图像处理基础知识2(matlab位运算操作)
- 制作根文件系统时的几个小问题
- String、StringBuilder和StringBuffer区别
- STM32F4 RTC的使用
- android shape的使用
- java中的类(class),包(package),接口(interface)
- 动态加载js、css的简单实现代码
- A year using Ionic to build hybrid applications
- Kaggle 入门 Crime
- html 页面太长滚动时,固定页面菜单标签,或者导航标签的位置,fixed/stickUp the position
- 测试网站访问速度的方法(GTmetrix)
- 寻找水王02