POJ 2502 Dijsktra
POJ subway 600K 0MS
题意:乘坐地铁从家到学校,地铁40km/h 步行10km/h , 已知各个站点的x,y坐标,输入的信息每个列次用-,-1隔开,要求花费的时间最少
解决方案:把家和学校各看成一个站点,求出相邻站点的权值(路程/速度),以站点数量建立map,保留两站之间的距离,然后dijsktra算法寻找两站点间最短路径
问题:结束条件EOF,sign初始值
#include<iostream>
#include<cmath>
#define MAX 10000000.0
using namespace std;
double pt[][];// 存放站点的坐标值
double map[][];// 存放各个站点直接的权值(路程/速度)
double d[]; //记录各点到起点最短距离
double dijkstra(int x, int y,int n)// pt[x]为起点 ,pt[y]为终点 一共n个站点
{
int i,j,k,tx=x,next;//next下一个最短路径位置
double min ;
bool visited[];
memset(visited,false,sizeof(visited));
visited[x]=true;
for (i=;i<n;i++)
if(!visited[i])d[i]=map[][i];
for(i=; i<n; i++)
{
min = MAX;
for (j=; j<n; j++)//找到附近最小的路径
if(!visited[j] && d[j]<min)
min=d[j], next=j;
visited[next]= true;//访问
if(next==y) break; //找到终点的最短距离,结束
for (j=; j<n; j++)//更新各点到源点最短路信息
if(!visited[j] && d[j]>d[next]+map[next][j])
d[j]=d[next]+map[next][j];
}
return d[y];
}
int main()
{
char c;
int i,j,k,num,sign;//num记录站点个数, sign标记站点关联
cin >> pt[][] >> pt[][] >> pt[][] >> pt[][];//pt[0],pt[1] 记录起点、终点 memset(map,,sizeof(map));
num = ,sign = ;//sign=0 隔离站点关联
while( scanf("%lf%lf",&pt[num][],&pt[num][])!=EOF)
{
// c=getchar();if(c=='#') break;
if(pt[num][]==- && pt[num][]==-)
{
sign = ; continue;
}
if(sign)//求出相邻地铁站点间的权值
map[num][num-]=map[num-][num]=
(sqrt(pow(pt[num][]-pt[num-][],2.0)+pow(pt[num][]-pt[num-][],2.0)))/40000.0;
++num, sign =;
}
//求出剩余各个站点间的权值
for(i=; i<num; i++)
for (j=; j<num; j++)
if(map[i][j]==) map[i][j]=map[j][i]=(sqrt((pt[i][]-pt[j][])*(pt[i][]-pt[j][])+(pt[i][]-pt[j][])*(pt[i][]-pt[j][])))/10000.0;
printf("%0.lf\n",dijkstra(,,num)*);//四舍五入输出结果
return ;
}
这是第一次做图论题,复习了一下Dijsktra算法,关键是建立map模型。。。
POJ 2502 Dijsktra的更多相关文章
- POJ 2502 - Subway Dijkstra堆优化试水
做这道题的动机就是想练习一下堆的应用,顺便补一下好久没看的图论算法. Dijkstra算法概述 //从0出发的单源最短路 dis[][] = {INF} ReadMap(dis); for i = 0 ...
- 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 ...
- Subway POJ 2502
题目链接: http://poj.org/problem?id=2502 题目大意: 你刚从一个安静的小镇搬到一个吵闹的大城市,所以你不能再骑自行车去上学了,只能乘坐地铁或者步行去上学.因为你不想迟到 ...
- POJ 2502 Subway(迪杰斯特拉)
Subway Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6692 Accepted: 2177 Descriptio ...
- POJ 2502 Subway (Dijkstra 最短+建设规划)
Subway Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6689 Accepted: 2176 Descriptio ...
- POJ 2502 最短路
http://poj.org/problem?id=2502 同一条地铁线上的站点相邻点间按照v2建边,然后所有点之间按照v1更新建边,所有的边都是双向边,both directions. 然后直接跑 ...
- kuangbin_ShortPath L (POJ 2502)
dij部分还是跟模板差不多的 但是这题的难点是处理输入 或者说理解题意 事实上每个点之间都是可以走的......WA了好几发就因为没意识到同一条路线上的各个站点之间居然也可以走得比车子快.... PS ...
- POJ 2502 Subway
Subway Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4928 Accepted: 1602 Descriptio ...
- Dijkstra+计算几何 POJ 2502 Subway
题目传送门 题意:列车上行驶40, 其余走路速度10.问从家到学校的最短时间 分析:关键是建图:相邻站点的速度是40,否则都可以走路10的速度.读入数据也很变态. #include <cstdi ...
随机推荐
- 完整的 AJAX 写法(支持多浏览器)
代码如下: <script type="text/javascript"> var xmlhttp; function Submit() { //1.创建 XMLHtt ...
- Oracle课堂实验一“表的使用”代码。
--创建本地管理表空间CustomerTBSCREATE TABLESPACE CustomerTBS DATAFILE 'd:\Oracle11\product\11.2.0\ora ...
- Swift(三.函数)
一.swift中的函数分为以下几类吧 1>无参无返 2>无参有返 3>有参无返 4>有参有返 5>有参多返 二.看下面几个例子吧 1>无参无返 func a ...
- STM32之串口通信
一.RS232通信协议 1.概念 个人计算机上的通讯接口之一,由电子工业协会(Electronic Industries Association,EIA) 所制定的异步传输标准接口. 2.电气特性 逻 ...
- Java Annotation手册
Java Annotation手册 作者:cleverpig(作者的Blog:http://blog.matrix.org.cn/page/cleverpig) 原文:http://www.matri ...
- css实现网页布局随滚轮变化响应移动
_position:absolute; _top:expression(eval(document.documentElement.scrollTop)); 1.第一句代码 _position:abs ...
- complex(x):创建一个复数
使用python可以实现将一个整数或者浮点数转换为一个复数: 演示如下: >>> # 演示复数函数:complex(x) ... >>> x = complex(1 ...
- 【JavaScript】JavaScript函数的参数
要访问js函数中传入的所有参数,可以使用特殊的arguments变量.但是虽然可以像访问数组一样从arguments变量中读取参数,但arguments并非真正的数组.例如,arguments没有pu ...
- [wikioi]传纸条
http://wikioi.com/problem/1169/ 棋盘型的动态规划,这道题可以看成是从左上角向右下角走两条不重合的路(除了开始和结尾).动态规划要想的是状态和阶段,状态是(x1,y1,x ...
- dump 验证实例恢复的起点和终点
什么时候会产生实例恢复呢?当你数据库服务器异常断电,重启数据库就会发生实例恢复.实例恢复是由数据库自动完成的,无须DBA的干涉.当然这里有个前提条件:数据文件. 在线日志文件.控制文件不得有损坏. 我 ...