POJ 2502 【思维是朴素的最短路 卡输入和建图】
2015-09-27 09:24
232 查看
题意:
给出两个坐标,分别是小明家和小明学校的坐标。
给出多条地铁线,给出每站的坐标,已知地铁是双向的,每条线以-1 -1结尾。
给出地铁速度,步行速度。
地铁线可看成是顺次连接的线段。
求小明从家到学校用到的时间。
思路:
任何两点之间都可以连速度为步行的无向边,地铁相邻两站可以连速度为地铁速度的无向边。
之后进行SPFA;
给出两个坐标,分别是小明家和小明学校的坐标。
给出多条地铁线,给出每站的坐标,已知地铁是双向的,每条线以-1 -1结尾。
给出地铁速度,步行速度。
地铁线可看成是顺次连接的线段。
求小明从家到学校用到的时间。
思路:
任何两点之间都可以连速度为步行的无向边,地铁相邻两站可以连速度为地铁速度的无向边。
之后进行SPFA;
#include<stdio.h> #include<string.h> #include<math.h> #include<queue> using namespace std; const int inf=999999999; double dis[205]; bool vis[205]; double numa=500.0/3; double numb=2000.0/3; struct node { double x,y; }; node nodes[205]; struct edge { int id; double mint; edge *next; }; edge edges[90500]; edge *adj[205]; int ednum; int num; double cal(int a,int b,double c) { return sqrt((nodes[a].x-nodes[b].x)*(nodes[a].x-nodes[b].x)+(nodes[a].y-nodes[b].y)*(nodes[a].y-nodes[b].y))/c; } inline void addEdge(int a,int b,double c) { edge *tmp; tmp=&edges[ednum]; ednum++; tmp->id=b; tmp->mint=c; tmp->next=adj[a]; adj[a]=tmp; } void SPFA() { memset(vis,0,sizeof(vis)); for(int i=1;i<num;i++) { dis[i]=inf; } queue<int>q; q.push(1); vis[1]=1; dis[1]=0; while(!q.empty()) { int tmp=q.front(); q.pop(); vis[tmp]=0; for(edge *p=adj[tmp];p;p=p->next) { if(p->mint+dis[tmp]<dis[p->id]) { dis[p->id]=p->mint+dis[tmp]; if(!vis[p->id]) { q.push(p->id); vis[p->id]=1; } } } } } int main() { for(int i=1;i<=204;i++) { adj[i]=NULL; } ednum=0; num++; scanf("%lf%lf",&nodes[num].x,&nodes[num].y); num++; scanf("%lf%lf",&nodes[num].x,&nodes[num].y); num++; while(scanf("%lf%lf",&nodes[num].x,&nodes[num].y)!=EOF) { num++; while(scanf("%lf%lf",&nodes[num].x,&nodes[num].y)) { if(nodes[num].x<0&&nodes[num].y<0) break; num++; addEdge(num-1,num-2,cal(num-1,num-2,numb)); addEdge(num-2,num-1,cal(num-1,num-2,numb)); } } for(int i=1;i<num;i++) { for(int j=1;j<i;j++) { addEdge(i,j,cal(i,j,numa)); addEdge(j,i,cal(i,j,numa)); } } SPFA(); printf("%.0lf\n",dis[2]); }
相关文章推荐
- Swift学习笔记基础语法-整数类型
- JS对象序列化为JSON对象
- UML用例图
- WebView在API 17后调addJavascriptInterface方法无效的解决办法
- 配置Tomcat
- hadoop2集群安装和测试之软件安装配置
- HDU 5480:Conturbatio 前缀和
- java 快速排序
- 12299 - RMQ with Shifts(线段树单点更新、区间求最值)
- PermGen space错误解决方法
- HDU 5480:Conturbatio 前缀和
- php在fatal error下出现500
- php相关名字解释
- node express session
- 线段相交的应用
- 设备访问机制------总结
- mac iterm2 使用lrzsz 上传和下载
- U盘装centos日记(使用大白菜最新版20150927)
- gonna, gotta, wanna
- Android studio 中国的垃圾问题解决