题意:
你从家往学校赶,可以用步行和乘坐地铁这两种方式,步行速度为10km/h,乘坐地铁的速度为40KM/h。输入数据的第一行数据会给你起点和终点的x和y的坐标。然后会给你数目不超过200的双向地铁线路的站点,你可以从一个站点乘坐地铁到下一个站点,你可以在同一线路上乘坐地铁经过不同的站点,在不同线路的站点之间,你只能用步行的方式。让你求利用你可以利用的方式,求解到校花费的最短时间。


思路:
基础最短路径问题,Dijkstra算法可以解决。需要特别注意以下输入数据的方式,这道题目没有很明显的输入结束标志,要用scanf()!= EOF来进行判断。然后把图的信息存入 map数组里面,当i到j在一条铁路线路上的时候,用它的距离除以40000来求解时间并存入map[i][j]中,map其他的位置存储不行的时间,然后套用模板直接求解最短路径就可以了。

#include<iostream>
#include<cmath>
#include<string>
#include<cstdlib>
#include<algorithm>
using namespace std; const double INF=100000000.0; struct Point
{
double x;
double y;
}p[205]; bool visited[205];
int n;
double d[205];
double map[205][205];
double getLen(Point p1,Point p2){
return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
}
void Dijkstra(){
int i,j,u;
double temp;
visited[0]=true;
for(i=0;i<n;i++)
d[i]=map[0][i];
for(i=1;i<n;i++)
{
temp=INF;
for(j=0;j<n;j++)
if(!visited[j]&&d[j]<temp)
{
temp=d[j];
u=j;
}
visited[u]=true;
for(j=0;j<n;j++)
if(!visited[j])
{
temp=d[u]+map[u][j];
if(temp<d[j])
d[j]=temp;
}
}
}
int main()
{
int i,j;
double temp;
bool flag=false;
scanf("%lf%lf%lf%lf",&p[0].x,&p[0].y,&p[1].x,&p[1].y); //起始位置和目的地坐标
n=2;
memset(map,0,sizeof(map));
while(~scanf("%lf%lf",&p[n].x,&p[n].y))
{
if(p[n].x==-1&&p[n].y==-1)
{
flag=false;
continue;
}
if(flag) //有效的处理了只输入第一个点时不产生线段
{
temp=getLen(p[n],p[n-1])/40000.0; //存储的是时间(小时),地铁的速度是40km/h
map[n][n-1]=map[n-1][n]=temp;
}
n++;
flag=true;
}
//得到所有步行段的距离 一共n(2+(n-2))个点
for(i=0;i<n;i++) //计算需要步行的所用的时间
for(j=0;j<n;j++)
if(i!=j&&map[i][j]==0.0)//初始是0.0(步行段)
map[i][j]=map[j][i]=getLen(p[i],p[j])/10000.0; //步行的速度是10km/h memset(visited,0,sizeof(visited));
//Dijkstra算法求解最短路
Dijkstra(); //题目所要求的单位是分钟
printf("%0.0lf\n",60.0*d[1]);
return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

Dijkstra--POJ 2502 Subway(求出所有路径再求最短路径)的更多相关文章

  1. POJ 2502 Subway / NBUT 1440 Subway / SCU 2186 Subway(图论,最短距离)

    POJ 2502 Subway / NBUT 1440 Subway / SCU 2186 Subway(图论,最短距离) Description You have just moved from a ...

  2. POJ 2502 - Subway Dijkstra堆优化试水

    做这道题的动机就是想练习一下堆的应用,顺便补一下好久没看的图论算法. Dijkstra算法概述 //从0出发的单源最短路 dis[][] = {INF} ReadMap(dis); for i = 0 ...

  3. HDU-4612 Warm up,tarjan求桥缩点再求树的直径!注意重边

    Warm up 虽然网上题解这么多,感觉写下来并不是跟别人竞争访问量的,而是证明自己从前努力过,以后回头复习参考! 题意:n个点由m条无向边连接,求加一条边后桥的最少数量. 思路:如标题,tarjan ...

  4. POJ 2502 Subway (Dijkstra 最短+建设规划)

    Subway Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6689   Accepted: 2176 Descriptio ...

  5. poj 2502 Subway【Dijkstra】

    <题目链接> 题目大意: 某学生从家到学校之间有N(<200)条地铁,这个学生可以在任意站点上下车,无论何时都能赶上地铁,可以从一条地铁的任意一站到另一条地跌的任意一站,学生步行速度 ...

  6. (简单) POJ 2502 Subway,Dijkstra。

    Description You have just moved from a quiet Waterloo neighbourhood to a big, noisy city. Instead of ...

  7. Dijkstra+计算几何 POJ 2502 Subway

    题目传送门 题意:列车上行驶40, 其余走路速度10.问从家到学校的最短时间 分析:关键是建图:相邻站点的速度是40,否则都可以走路10的速度.读入数据也很变态. #include <cstdi ...

  8. POJ 2502 Subway(迪杰斯特拉)

    Subway Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6692   Accepted: 2177 Descriptio ...

  9. POJ 2502 Subway (最短路)

    Subway 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/L Description You have just moved ...

随机推荐

  1. 安装CMS遇到php5.3的问题

    DedeCMS Error: (PHP 5.3 and above) Please set 'request_order' ini value to include C,G and P (recomm ...

  2. SqlServer将表中数据复制到另一张表

    insert into phone2(ph,attr,type,carrier) select top 1000 ph,attr,type,carrier from phone 将表phone的字段和 ...

  3. T—SQL用法剪辑,方便以后查看

    一.用T-SQL查询表中第n行到第m行数据的写法示例 假设这里的n=6,m=10则有以下两种写法,qusID可以不连续,如下: select top 5 * from tb_wenti where q ...

  4. Android触摸屏配置调试

    前几天搞乐蛙时,进入后是鼠标模式,好坑爹的模式有木有~~ 但是大蛋给出了解决方法,我不怕不怕啦~让我们向大牛致敬!!! 首先输入Command查看你的input配置~ adb shell dumpsy ...

  5. 在openSUSE13.2上gem install rails -v 4.1成功,但是之后不存在rails命令解决

    解决方案为,不要用sudo gem install就好了,卧槽

  6. Swing基础

    Swing基础 JFrame JPanel 绘图:paint 监听事件: ActionListener  KeyListener Listener和Adapter 计时器:Timer     Time ...

  7. C#巧用Excel模版变成把Table打印出来

    将一个做好的Excel模版,通过程序填上数据然后打印出来这个需求有两种方法一种是通过代码打开Excel模版然后填入数据然后再打印. 第二种方法就是我将要介绍的 1.将Excel设置好格式另存为HTML ...

  8. Stream,Reader/Writer,Buffered的区别(1)

    Stream: 是字节流形式,exe文件,图片,视频等.支持8位的字符,用于 ASCII 字符和二进制数据. Reader/Writer: 是字符流,文本文件,XML,txt等,用于16位字符,也就是 ...

  9. ZLG_GUI配置与函数介绍

    http://www.docin.com/p-825479457.html ZLG_GUI配置与函数介绍

  10. MVC模式中路由如何生成URL

    路由有必要的参数吗 在MVC设计模式中,一个比较重要的步骤是浏览器发送的请求如何生成相应的URL,交给服务器去实例化相应的控制器类然后调用相应的控制器类的对应方法,返回视图给用户.这个流程细说起来比较 ...