Dijkstra--POJ 2502 Subway(求出所有路径再求最短路径)
- #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(求出所有路径再求最短路径)的更多相关文章
- 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 ...
- POJ 2502 - Subway Dijkstra堆优化试水
做这道题的动机就是想练习一下堆的应用,顺便补一下好久没看的图论算法. Dijkstra算法概述 //从0出发的单源最短路 dis[][] = {INF} ReadMap(dis); for i = 0 ...
- HDU-4612 Warm up,tarjan求桥缩点再求树的直径!注意重边
Warm up 虽然网上题解这么多,感觉写下来并不是跟别人竞争访问量的,而是证明自己从前努力过,以后回头复习参考! 题意:n个点由m条无向边连接,求加一条边后桥的最少数量. 思路:如标题,tarjan ...
- POJ 2502 Subway (Dijkstra 最短+建设规划)
Subway Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6689 Accepted: 2176 Descriptio ...
- poj 2502 Subway【Dijkstra】
<题目链接> 题目大意: 某学生从家到学校之间有N(<200)条地铁,这个学生可以在任意站点上下车,无论何时都能赶上地铁,可以从一条地铁的任意一站到另一条地跌的任意一站,学生步行速度 ...
- (简单) POJ 2502 Subway,Dijkstra。
Description You have just moved from a quiet Waterloo neighbourhood to a big, noisy city. Instead of ...
- Dijkstra+计算几何 POJ 2502 Subway
题目传送门 题意:列车上行驶40, 其余走路速度10.问从家到学校的最短时间 分析:关键是建图:相邻站点的速度是40,否则都可以走路10的速度.读入数据也很变态. #include <cstdi ...
- POJ 2502 Subway(迪杰斯特拉)
Subway Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6692 Accepted: 2177 Descriptio ...
- POJ 2502 Subway (最短路)
Subway 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/L Description You have just moved ...
随机推荐
- MongoDb 与 Nodejs服务器的启动
1) 启动MongoDB : MongoDB —dbpath databaseNameFolder. 2) 启动数据库 : Mongo DatabaseName. 3) 启动NodeJs: Node ...
- Java实现计算20的阶乘
循环从1乘到20,要注意的就是结果可能会很大,长度超出int类型的范围,所以定义乘积的时候用long. 代码如下: public class Practice3 { public static voi ...
- android开源代码
Android开源项目--分类汇总 转自:https://github.com/Trinea/android-open-project Android开源项目第一篇——个性化控件(View)篇 包括L ...
- delphi函数调用约定
指令 参数存放位置 参数传递顺序 参数内存管理 使用地方 Register CPU寄存器 从左到右 被调用者 默认,published属性存取方法必须使用 Pascal 栈 从左到右 被调用者 向后兼 ...
- 【坑】log4j-over-slf4j.jar AND slf4j-log4j12.jar的冲突问题
为了解决这个问题,已经有砸电脑的冲动了.通过百度查找都说是Maven依赖的原因,经过各种尝试仍然没有解决,后来终于在QQ群的帮助下,算是暂时过关. [问题] 程序在本地运行没有问题,打成jar包发布到 ...
- AppCan应用开发之插件实践篇-支付插件
电商O2O无疑是目前最受用户欢迎的APP类型,而在这类APP中必不可少的就是在线支付功能了.在AppCan平台开发这类应用时,官方封装了微信支付.支付宝.银联等多种支付SDK,更接入了多家聚合支付平台 ...
- Oracle 12c 数据库中scott用户不存在的解决方法
-- 使用超级管理员登录CONN sys/change_on_install AS SYSDBA ;-- 创建c##scott用户CREATE USER c##scott IDENTIFIED BY ...
- Power Map 入门
Excel 的 Microsoft Power Map是三维 (3-D) 数据的可视化工具,允许您以新的方式看信息.电源映射允许您发现您可能看不到传统的二维 (2-d) 表和图中的见解. 使用Powe ...
- C#中的委托与事件
1,委托? 通俗来讲,就是一个能存放符合某种格式(签名)的方法的指针 的容器 (可以将方法作为一个参数来传递到另一个方法内执行) 定义委托:delegate string DelegateSayHi ...
- 开启Objective-C --- OC基础知识
一.Objective-C简述 Objective-C通常写作ObjC和较少用的Objective C或Obj-C,是扩充C的面向对象编程语言.Objective-C主要用于:编写iOS操作 ...