POJ2502 Subway(最短路径)
2016-04-13 08:20
357 查看
题意:
从家到学校,给出家和学校的坐标,可以做地铁或走路,走路10KM/H,坐地铁40KM/H,地铁有很多条线路,每条线路之间有很多站点,给出每个站点的坐标(都是整数),要求到学校需要最短的分钟数(四舍五入后取整)
要点:
这题的输入简直日了狗了,线路的数目是以EOF结尾的,完全没办法验证数据。简单的说就是用一个map数组存储从点i到j需要的时间,然后Floyd模板即可。关键这个map数组不好做,同一条线路中相邻的站点可以用地铁方式算(不算每条线路的第一个站点,地铁只能一站一站的到),如果不相邻就用步行即可。
从家到学校,给出家和学校的坐标,可以做地铁或走路,走路10KM/H,坐地铁40KM/H,地铁有很多条线路,每条线路之间有很多站点,给出每个站点的坐标(都是整数),要求到学校需要最短的分钟数(四舍五入后取整)
要点:
这题的输入简直日了狗了,线路的数目是以EOF结尾的,完全没办法验证数据。简单的说就是用一个map数组存储从点i到j需要的时间,然后Floyd模板即可。关键这个map数组不好做,同一条线路中相邻的站点可以用地铁方式算(不算每条线路的第一个站点,地铁只能一站一站的到),如果不相邻就用步行即可。
15385076 | Seasonal | 2502 | Accepted | 832K | 141MS | C++ | 1142B | 2016-04-13 08:08:56 |
#include<iostream> #include<cmath> #include<string> #include<cstdlib> #include<algorithm> #define d double //注意sqrt输出的形式要与因子匹配,要输出double因子要都是double #define distance(t,s) sqrt(((d)t.x-(d)s.x)*((d)t.x-(d)s.x)+((d)t.y-(d)s.y)*((d)t.y-(d)s.y)) using namespace std; int x[405], y[405]; double map[405][405];//记录到点之间需要的时间 struct node { int x, y; }p[500]; void floyd(int n) { for (int k = 1; k < n; k++) for (int i = 1; i < n; i++) for (int j = 1; j < n; j++) if (map[i][j]>map[i][k] + map[k][j]) map[i][j] = map[i][k] + map[k][j]; } int main() { int a,b; scanf("%d%d%d%d", &p[1].x, &p[1].y, &p[2].x, &p[2].y);//点都是非负整数 map[2][1] = map[1][2] = distance(p[1], p[2])*60.0/10000.0; int n = 3, j = 0; while (scanf("%d%d", &a, &b) != EOF) { if (a == -1 && b == -1) j = 0; //j=0说明不在同一条线路中,也就是每条线路中第一个站点不用与前一个计算 else { p .x = a, p .y = b; for (int i = 1; i < n - j; i++) //计算所有点到当前点的步行时间 map[i] = map [i] = distance(p[i],p )*60.0/10000.0; for (int i = n - j; i<n; i++) //地铁时一直与前一个相邻的计算 map[i] = map [i] = distance(p[i],p )*60.0/40000.0; j = 1, n++; } } floyd(n); printf("%d\n", (int)(map[1][2]+0.5));//最后输出舍入后的整数分钟数。 return 0; }
相关文章推荐
- dp基础习题(4.13)
- 网络:登录界面搭建与数据保存
- LeetCode 143. Reorder List
- 采集(file_get_contents)
- Android OCR 之 tesseract
- WKWebView中HTML5获取位置失败
- Android studio 中使用xUtils报错找不到org.apache.http.client.methods.HttpRequestBase的类文件
- 【黑马Android】(05)短信/查询和添加/内容观察者使用/子线程网络图片查看器和Handler消息处理器/html查看器/使用HttpURLConnection采用Post方式请求数据/开源项目
- 每日开源新闻速递(2016/4/13):LXD 2.0 发布;Let's Encrypt 项目正式发布!
- pdo的基本使用
- 动态规划之01背包问题(最易理解的讲解)
- C++ 学习笔记十四 - C++ char命令传送中文练习
- 最短路算法 (bellman-Ford算法)
- LeetCode 273. Integer to English Words
- 2016-4-13
- [6] Word Q&A
- 一张图让你学会LVM
- 25个iptables常用示例
- 高效而轻松的sed命令
- [5] Word 手把手教你写毕业论文-2