Subway POJ - 2502 最短路

题意:给出地铁线  起点和 终点  坐地铁速度为v2  走路为v1 求起点到终点的最短距离  (答案需要四舍五入这里坑了好久)

拿给出的地铁站点 和起点终点建边即可  然后跑个迪杰斯特拉

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 using namespace std;
 6 const double v1=10000.0/60;
 7 const double v2=40000.0/60;
 8 int n;
 9 const int maxn=300+5;
10 double dist[maxn];
11 double cost[maxn][maxn];
12 int vis[maxn];
13 const double INF=1e30;
14
15 struct Node{
16     double x,y;
17 }node[maxn];
18
19 double dis(const Node&a,const Node&b){
20     return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
21 }
22
23 void Dijkstra(){
24     for(int i=1;i<=n;i++){
25         dist[i]=INF;
26     }
27     memset(vis,0,sizeof(vis));
28     dist[1]=0;
29     for(int j=0;j<n;j++){
30         int k=-1;
31         double minnum=INF;
32         for(int i=1;i<=n;i++){
33             if(!vis[i]&&dist[i]<minnum){
34                 minnum=dist[i];
35                 k=i;
36             }
37         }
38         if(k==-1)break;
39     vis[k]=1;
40     for(int i=1;i<=n;i++){
41         if(!vis[i]&&dist[k]+cost[k][i]<dist[i]){
42             dist[i]=dist[k]+cost[k][i];
43     }
44     }
45 }
46 }
47 int main(){
48     while(scanf("%lf%lf%lf%lf",&node[1].x,&node[1].y,&node[2].x,&node[2].y)==4){
49         n=2;
50     int cnt1=3;
51         for(int i=1;i<maxn;i++)
52             for(int j=1;j<maxn;j++)
53                 if(i!=j)cost[i][j]=INF;
54                 else cost [i][j]=0;
55         int x,y;
56         bool ok=0;
57
58         while(scanf("%d%d",&x,&y)==2){
59             if(x==-1&&y==-1){
60             ok=0;
61                 continue;
62             }
63             n++;
64             node[n].x=x;
65             node[n].y=y;
66             if(ok){
67                 cost[n][n-1]=cost[n-1][n]=min(cost[n][n-1],dis(node[n],node[n-1])/v2);
68             }
69             ok=1;
70         }
71         for(int i=1;i<=n;i++)
72             for(int j=1;j<=n;j++){
73                cost[i][j]=cost[j][i]=min(cost[i][j],dis(node[i],node[j])/v1);
74             }
75         Dijkstra();
76     cout << int( dist[2] + 0.5 );
77     }
78     return 0;
79 }

原文地址:https://www.cnblogs.com/ttttttttrx/p/9742421.html

时间: 2024-11-10 12:30:04

Subway POJ - 2502 最短路的相关文章

Subway poj 2502

http://poj.org/problem?id=2502 题意:在一个城市里,分布着若干条地铁线路,每条地铁线路有若干个站点,所有地铁的速度均为40km/h.现在你知道了出发地和终点的坐标,以及这些地铁 线路每个站点的坐标,你的步行速度为10km/h,且你到了地铁的任意一个站之后就刚好有地铁出发.问你从出发点到终点最少需要多少时间. #include<stdio.h> #include<vector> #include<queue> #include<algo

L - Subway - POJ 2502

题意:在一个城市里,分布着若干条地铁线路,每条地铁线路有若干个站点,所有地铁的速度均为40km/h.现在你知道了出发地和终点的坐标,以及这些地铁 线路每个站点的坐标,你的步行速度为10km/h,且你到了地铁的任意一个站之后就刚好有地铁出发.问你从出发点到终点最少需要多少时间. ////////////////////////////////////////////////////////////////////// 有很多站点,给的数据只是一条条线路,所以需要先预处理数据,增加任意两点人走需要的

Subway POJ - 2502 spfa

#include<cstdio> #include<cmath> #include<cstring> #include<cstring> #include<iostream> #include<queue> using namespace std; const int N=205; const double INF=0x3f3f3f3f; int k,l; struct node { double x,y; int num; } s[

POJ 2502 SUBWAY(最短路)

POJ 2502 SUBWAY 题目链接:http://poj.org/problem?id=2502 题目大意:求从a点到b点所需要的最短时间. 题目思路:用最短路来求,把各个点之间的时间看作所需要的路程.然后用 dij求最短路就可以了,感觉输入有点坑,还有在每条地铁线上,只有相同地铁线上的 点可以互相到达. #include<stdio.h> #include<algorithm> #include<math.h> using namespace std; cons

poj 1502 最短路+坑爹题意

链接:http://poj.org/problem?id=1502 MPI Maelstrom Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5249   Accepted: 3237 Description BIT has recently taken delivery of their new supercomputer, a 32 processor Apollo Odyssey distributed share

POJ 2448(K短路,A*+SPFA) Remmarguts&#39; Date

题意 给一个n个点m条边的图,然后给一个起点和一个终点,求起点到终点的第K短路. 思路 求第K短路.一个经典的问题. SPFA+A* 核心思想在A*搜索的估计函数的建立上. F(x) = g(x) + h(x) 估价函数 = s到x的距离 + x到t的距离 估价函数的含义就是经过x这个点的路径的距离. 我们在搜索的时候每次选择估价函数较小的值,进行拓展.这样我们搜索到t点的状态出来顺序就是,最短路-次短路-.第三短路- 就减少了我们搜索的状态数. 代码实现上,实现一个估价函数的结构体,然后是实现

poj 1135 最短路 dijkstra

传送门 http://poj.org/problem?id=1135 建模分两部分:1.如果最后是关键牌倒下,那么找最短路中最长的就行--最远的倒下,其他的牌一定倒下,所以找最远的最短路 2.如果最后是普通牌倒下,那么找三角形,三角形周长的一半就是倒下的位置 到底是情况1还是情况2,自己在脑子模拟一下就能想到,还是那句话,最难倒下的倒下了,其他的一定都倒下了,若第二种情况的时间比第一种长,那么就是第二种,反之,第一种 上代码 /**********************************

It&amp;#39;s not a Bug, It&amp;#39;s a Feature! (poj 1482 最短路SPFA+隐式图+位运算)

Language: Default It's not a Bug, It's a Feature! Time Limit: 5000MS   Memory Limit: 30000K Total Submissions: 1353   Accepted: 516 Description It is a curious fact that consumers buying a new software product generally do not expect the software to

Heavy Transportation POJ 1797 最短路变形

Heavy Transportation POJ 1797 最短路变形 题意 原题链接 题意大体就是说在一个地图上,有n个城市,编号从1 2 3 ... n,m条路,每条路都有相应的承重能力,然后让你求从编号为1的城市到编号为n的城市的路线中,最大能经过多重的车. 解题思路 这个题可以使用最短路的思路,不过转移方程变了\(dis[j]=max(dis[j], min(dis[u], e[u][j]))\).这里dis[j]表示从标号为1的点到达编号为j的点的路径中,最小的承重能力,就像短板效应样