思路:

需要注意的地方:一条地铁线路并不一定和样例描述的那样是直的;同一条线路上的两个站点步行可能更快。

实现:

 #include <iostream>
#include <cstdio>
#include <cmath>
using namespace std; const int MAXN = , INF = 0x3f3f3f3f;
int sx, sy, ex, ey;
double dis[MAXN][MAXN]; struct node
{
int x, y;
};
node a[MAXN]; int square(int x)
{
return x * x;
} double cal(int i, int j)
{
return sqrt((double)square(a[i].x - a[j].x) + (double)square(a[i].y - a[j].y));
} int main()
{
int x, y;
cin >> sx >> sy >> ex >> ey;
a[].x = sx; a[].y = sy;
int tmp = , cnt = ;
for (int i = ; i < MAXN; i++)
{
for (int j = ; j < MAXN; j++)
{
dis[i][j] = INF;
}
}
for (int i = ; i < MAXN; i++) dis[i][i] = ;
while (cin >> x >> y)
{
if (x == - && y == -)
{
for (int i = tmp; i < cnt - ; i++)
dis[i][i + ] = dis[i + ][i] = cal(i, i + ) / 40.0;
tmp = cnt;
continue;
}
a[cnt++].x = x; a[cnt - ].y = y;
}
a[cnt].x = ex; a[cnt].y = ey;
for (int i = ; i <= cnt; i++)
{
for (int j = i + ; j <= cnt; j++)
{
dis[i][j] = dis[j][i] = min(dis[i][j], cal(i, j) / 10.0);
}
}
for (int k = ; k <= cnt; k++)
{
for (int i = ; i <= cnt; i++)
{
for (int j = ; j <= cnt; j++)
if (dis[i][k] + dis[k][j] < dis[i][j])
dis[i][j] = dis[i][k] + dis[k][j];
}
} cout << int(dis[][cnt] / 1000.0 * 60.0 + 0.5) << endl;
return ;
}

最新文章

  1. Cannot run gnome extension in browser
  2. 优秀的JavaScript开发框架
  3. Java经典实例:在正则表达式中控制大小写
  4. c#之第二课
  5. Speed-BI数据分析案例:2016年7月汽车销量排行榜
  6. Delphi RICHEDIT中插入图象
  7. jquery中这句 .stop(false,true); 什么意思
  8. 复习HTML+CSS(5)
  9. BZOJ 4804
  10. 了解Linux操作系统发展阶段
  11. 算法手记(2)Dijkstra双栈算术表达式求值算法
  12. 【Python】统计个人新浪微博词频并给出相应的柱状图
  13. js字符串转日期兼容性
  14. exists 的使用
  15. VS2015 编译前/后拷贝文件到指定目录
  16. 清理.git文件
  17. @class指令的使用
  18. Slitaz 中文定制手册
  19. Python入门-散点图绘制
  20. EntityFramework定向加载实体

热门文章

  1. hdu 5288 OO’s Sequence(2015 Multi-University Training Contest 1)
  2. linux 下使用genymotion
  3. java的输入输出流(一)
  4. react 引入 百度地图API
  5. 科普:google的数字图书馆
  6. JAVA 并发编程-读写锁之模拟缓存系统(十一)
  7. (三)Java 开发环境配置
  8. python generator iterator和iterable object
  9. commons-fileupload 组件实现文件上传
  10. java7-Fork/Join