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 ...
随机推荐
- C# 利用TextBox的Text属性实现换行加字符 "\r\n"
要让一个TextBox显示多行文本就得把它的Multiline属性设置为true,可是如果你是要把TextBox的Text属性设置多行文本时,换行符由两个字符组成:"\r\n". ...
- js获取任意元素到页面的距离
function getPos(obj){ var pos={left:0,top:0} while(obj){ pos.left+=obj.offsetLeft; pos.top+=obj.offs ...
- AAABBBBCCCC
语单词词性简写语的意义:,n. 名词 ,noun的缩写v. 动词 , verb的缩写pron. 代词 , pronoun的缩写adj. 形容词, adjective的缩写adv. 副词, adverb ...
- 关于C# Winform 程序开机自动启动
1.程序运行时调用下面方法即可. /// <summary> /// 设置开机自动启用 /// </summary> private void SetAutoStart() { ...
- js在php 中出现 unterminated string literal 解决方法
出现这个问题就是空格造成的(可清空格符,换行符等) 示例代码如下: php 下报错 <?php echo "<a href=javascript:if(window.confir ...
- css reset浅谈
我们都知道,web开发中浏览器兼容性是困扰很多开发者的一个问题.所谓兼容性问题,即不同浏览器对同一段代码有不同的解析效果.而我们的需求往往是无论用户使用何种浏览器查看我们的网站,都应该获得相同或相近的 ...
- php不允许用户提交空表单(php空值判断)
我们在设计提交空的评论时依然可以写入数据库,并在页面显示出来.这显然是不合理的,所以需要我们加入空值判断 可以修改代码,添加些判断: 复制代码代码如下: if(empty($_POST['name ...
- Poco之ftp目录切换与创建
TEMPLATE = app QT += qml quick widgets#LIBS += -lPocoFoundation -lPocoXML -lPocoNetSOURCES += main.c ...
- python使用sqlite3
import sqlite3 mysqldb=sqlite3.connect(r"C:\Users\Administrator\Desktop\testdb.db") mysqld ...
- Python3实现连接SQLite数据库的方法
本文实例讲述了Python3实现连接SQLite数据库的方法,对于Python的学习有不错的参考借鉴价值.分享给大家供大家参考之用.具体方法如下: 实例代码如下: ? 1 2 3 4 5 6 7 8 ...