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 ...
随机推荐
- UI Button
iOS开发UI篇—Button基础 一.简单说明 一般情况下,点击某个控件后,会做出相应反应的都是按钮 按钮的功能比较多,既能显示文字,又能显示图片,还能随时调整内部图片和文字的位置 二.按钮的三种状 ...
- 发送Ajax请求获取JSON格式数据
Aspx前端页面: <script type="text/javascript"> $(function () { $.getJSON("Ajax/TestA ...
- [leetcode]_Reverse Integer
经历了三道树的题后,完全崩溃中,急需一道非树图的题来挽救信心. 题目:反转数字.input : 123 , output : 321. 思路:直接,没什么好说的. 自己代码:很龊,有大量的冗余信息,还 ...
- Linux命令学习---目录
一.文件相关命令 1.文件显示 1)tail,head,more,less,cat,nl
- 【原】SBT构建Scala应用
[转帖] 原文地址:https://github.com/CSUG/real_world_scala/blob/master/02_sbt.markdown 尊重版权,尊重他人劳动成果,转帖请注明原文 ...
- delphi 连接MYSQL 的方法
需要的控件:(view as form) 1.SQLConnection1: TSQLConnection ConnectionName = 'MYSQLCONNECTION' DriverName ...
- 最新中国IP段获取办法与转成ROS导入格式
获取中国IP段办法 1.到APNIC获取亚太最新IP分配 http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest 2 ...
- 第六章 管理类型(In .net4.5) 之 创建类型
1. 概述 本章内容包括 C#5中如何更好的创建类型以及如何扩展现有类型. 2. 主要内容 2.1 如何选择类型 C#类型系统包括三种类型:值类型.引用类型.指针类型.(指针类型用于非托管代码,很少使 ...
- 几道华为经典C语言面试题
1.找错 void test1() { char string[10]; char* str1="0123456789"; strcpy(string, str1); } 这里st ...
- 插值和空间分析(二)_变异函数分析(R语言)
方法1.散点图 hscat(log(zinc)~, meuse, (:)*) 方法2.变异函数云图 library(gstat) cld <- variogram(log(zinc) ~ , m ...