博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dijkstra+计算几何 POJ 2502 Subway
阅读量:5255 次
发布时间:2019-06-14

本文共 1374 字,大约阅读时间需要 4 分钟。

 

题意:列车上行驶40, 其余走路速度10.问从家到学校的最短时间

分析:关键是建图:相邻站点的速度是40,否则都可以走路10的速度.读入数据也很变态.

 

#include 
#include
#include
#include
#include
using namespace std;const int N = 2e2 + 5;const int E = N * N;const double INF = 1e30;struct Point { double x, y;}p[N];bool vis[N];double d[N];double w[N][N];double sx, sy, ex, ey;int tot;void Dijkstra(int s) { memset (vis, false, sizeof (vis)); for (int i=1; i<=tot; ++i) { d[i] = INF; } d[s] = 0; for (int i=1; i<=tot; ++i) { double mn = INF; int x = -1; for (int j=1; j<=tot; ++j) { if (!vis[j] && mn > d[j]) mn = d[x=j]; } if (x == -1) break; vis[x] = true; for (int j=1; j<=tot; ++j) { if (!vis[j] && d[j] > d[x] + w[x][j]) { d[j] = d[x] + w[x][j]; } } }}double squ(double x) { return x * x;}double get_cost(Point p1, Point p2, int v) { double dis = sqrt (squ (p1.x - p2.x) + squ (p1.y - p2.y)) / 1000; return dis / v;}int main(void) { while (scanf ("%lf%lf%lf%lf", &sx, &sy, &ex, &ey) == 4) { for (int i=1; i
tim) { w[i][i+1] = w[i+1][i] = tim; } } l = tot + 1; continue; } p[++tot].x = x; p[tot].y = y; } p[++tot].x = ex; p[tot].y = ey; for (int i=1; i
tim) { w[i][j] = w[j][i] = tim; } } } Dijkstra (1); printf ("%.0f\n", d[tot] * 60); } return 0;}

  

转载于:https://www.cnblogs.com/Running-Time/p/5008465.html

你可能感兴趣的文章
Android学习之基础知识四-Activity活动5讲(Activity的生命周期)
查看>>
mysql 递归查询树形目录
查看>>
关于项目优化的一些小技巧
查看>>
简练软考知识点整理-规划人力资源管理
查看>>
php表单和缩略图处理类是什么样呢
查看>>
Linux文件权限总结
查看>>
【SQL Server学习笔记】全文检索
查看>>
4-13 Webpacker-React.js; 用React做一个下拉表格的功能: <详解>
查看>>
Daily Scrum Meeting ——FirstDay(Beta)12.09
查看>>
torch.eye
查看>>
第四周学习总结
查看>>
Dynamics 365中的批量删除作业执行频率可以高于每天一次吗?
查看>>
HDU-4734 F(x)数位dp
查看>>
玩NOILinux
查看>>
docker--container
查看>>
Linux知识扩展二:lsof命令
查看>>
【算法与数据结构】二叉搜索树的Java实现
查看>>
1.3分布式-分布式通讯(序列化)
查看>>
使用JavaScript代码实现各种数据控件的反选功能,不要只做拖控件的菜鸟
查看>>
tcp窗口
查看>>