poj 2502 Subway 【spfa】
来源:互联网 发布:nginx 后端服务器宕机 编辑:程序博客网 时间:2024/06/16 21:30
点击打开链接
给你n条地铁。问你从起点到终点最小耗时。
地铁40km/h 步行10km/h
题解: 只有最多只有200个车站,所以只要是最短路的算法,都能写。
就是处理边比较烦人,
因为之前忘记考虑不相邻车站的步行距离导致一直wa。
#include<iostream>#include<cstring>#include<queue>#include<cstdio>#include<map>#include<stack>#include<cmath>#include<algorithm>#include<vector>#define LL long longusing namespace std;const double inf=999999999;pair<double,double>p,st,ed,train[222];map<pair<double,double>,int>m;int cnt=0;struct Edge{ int v; double w; Edge(int _v=0,double _w=0):v(_v),w(_w){}};vector<Edge>e[222*222];void addedge(int u,int v,double w){ e[u].push_back(Edge(v,w));}double getd(pair<double ,double>x,pair<double ,double>y){ return sqrt((x.first-y.first)*(x.first-y.first)+(x.second-y.second)*(x.second-y.second));}int vis[222];double dis[222];void spfa(){ memset(vis,0,sizeof(vis)); for(int i=0;i<=cnt;++i) dis[i]=inf; vis[1]=1; dis[1]=0; queue<int>que; while(!que.empty()) que.pop(); que.push(1); while(!que.empty()){ int u=que.front(); que.pop(); vis[u]=0; for(int i=0;i<e[u].size();++i){ int v=e[u][i].v; if(dis[v]>dis[u]+e[u][i].w){ dis[v]=dis[u]+e[u][i].w; if(!vis[v]){ vis[v]=1; que.push(v); } } } }}int main(){ int i,nn=0,len=0; double a,b; scanf("%lf %lf %lf %lf",&st.first,&st.second,&ed.first,&ed.second); m[st]=++cnt;m[ed]=++cnt; double t=getd(st,ed); addedge(m[st],m[ed],t);addedge(m[ed],m[st],t); while(~scanf("%lf %lf",&a,&b)){ train[len].first=a,train[len].second=b; if(!m[train[len]]) m[train[len++]]=++cnt; while(scanf("%lf %lf",&a,&b)){ if(a==-1&&b==-1)break; train[len].first=a,train[len].second=b; if(!m[train[len]]) m[train[len++]]=++cnt; }double ss; for(i=nn;i<len-1;++i){ ss=getd(train[i],train[i+1])/4.0; addedge(m[train[i]],m[train[i+1]],ss); addedge(m[train[i+1]],m[train[i]],ss); } nn=len; } for(int i=0;i<len;++i){ double ss=getd(train[i],st); addedge(m[train[i]],m[st],ss); addedge(m[st],m[train[i]],ss); ss=getd(train[i],ed); addedge(m[train[i]],m[ed],ss); addedge(m[ed],m[train[i]],ss); for(int j=i+1;j<nn;++j){ double ss=getd(train[i],train[j]); addedge(m[train[i]],m[train[j]],ss); addedge(m[train[j]],m[train[i]],ss); } } spfa(); printf("%.0f\n",dis[2]*3.0/500.0);return 0;}
0 0
- poj 2502 Subway 【spfa】
- POJ 2502 Subway
- poj 2502 Subway
- poj 2502Subway flody
- POJ-2502-Subway
- poj 2502 Subway
- POJ 2502 Subway
- POJ 2502 Subway
- POJ 2502 Subway
- Dijkstra-POJ-2502-Subway
- POJ 2502 Subway
- POJ 2502 - Subway
- poj 2502 Subway
- POJ 2502 Subway
- poj 2502 Subway
- POJ 2502 Subway 笔记
- POJ-2502 Subway
- 最短路练习12/poj/2502 Subway dijkstar,spfa,floyd都可以解决
- 十六进制 0x1.2P5
- 为什么nosql
- mongdb
- 第七章 JAVA中的类和对象
- Windows使用Vagrant&VirtualBox搭建虚拟开发环境
- poj 2502 Subway 【spfa】
- C# Winform 窗体美化(目录)
- IDEA几个快捷键
- maven 学习笔记(二) maven及相关的eclipse插件安装
- 开篇
- 创建GitHub项目,并推送本地代码
- python的排序模块bisect
- 大数据与安全
- IDEA方便的快捷键