luoguP1354房间最短路问题
判断两点间连通性,建图跑floyed
#include<bits/stdc++.h>
using namespace std;
const int N=;
struct node
{
double z[],x;
}q[N];double e[N][N];
double dis(double x1,double y1,double x2,double y2)
{
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
bool come(int i,int j,int a,int b)
{
if(j-i<)return ;
double x1=q[i].x,x2=q[j].x,y1=q[i].z[a],y2=q[j].z[b];if(x1==x2)return ;
double k=(y1-y2)/(x1-x2),bb=y1-x1*k;
for(i=i+;i<j;++i)
{
double y=q[i].x*k+bb;
if(y<q[i].z[]||(y>q[i].z[]&&y<q[i].z[])||y>q[i].z[])return ;
}
return ;
}
void add(int i,int j,int a,int b)
{
if(come(i,j,a,b))return;
e[i*+a][j*+b]=e[j*+b][i*+a]=dis(q[i].x,q[i].z[a],q[j].x,q[j].z[b]);
}
int main()
{
int n;
scanf("%d",&n);
for(int i=;i<=n;++i)
{
scanf("%lf",&q[i].x);
for(int j=;j<=;++j)scanf("%lf",&q[i].z[j]);
}
q[].x=;q[++n].x=;
for(int i=;i<=;++i)q[].z[i]=q[n].z[i]=;
for(int i=;i<=n*+;++i)for(int j=;j<=n*+;++j)e[i][j]=1e9; for(int i=;i<=n;++i)
for(int j=i+;j<=n;++j)
for(int a=;a<=;++a)
for(int b=;b<=;++b)
add(i,j,a,b);
for(int k=;k<=n*+;++k)
for(int i=;i<=n*+;++i)
for(int j=;j<=n*+;++j)
e[i][j]=min(e[i][j],e[i][k]+e[k][j]);
printf("%.2lf",e[][n*+]);
return ;
}
luoguP1354房间最短路问题的更多相关文章
- 【u026】房间最短路问题
描述 在一个长宽均为10,入口出口分别为(0,5).(10,5)的房间里,有几堵墙,每堵墙上有两个缺口,求入口到出口的最短路经. 格式 输入格式 第一排为n(n<=20),墙的数目. 接下来n排 ...
- P1354 房间最短路问题
传送门 可以发现,最短路一定要经过墙壁的断点. 那么把房间看作一个有向图,墙壁的断点为节点,求从起点到终点的最短路. 这道题的难点在于建图.枚举所有的断点,若可以走则加入这条边. 判断两点是否连通,即 ...
- luogu 1354 房间最短路问题 线段与直线相交 最短路
题目链接 题目描述 在一个长宽均为10,入口出口分别为(0,5).(10,5)的房间里,有几堵墙,每堵墙上有两个缺口,求入口到出口的最短路经. 输入输出格式 输入格式: 第一排为n(n<=20) ...
- [Luogu P1354]房间最短路问题
这是一道紫题,然而实际上我觉得也就蓝题难度甚至不到. and,这道题就是一道数学题,代码模拟计算过程. 求最短路嘛,肯定要考虑建图,只需要把中间的墙上每个口的边缘处的点作为图中的点就行.至于为什么,显 ...
- luogu P1354 房间最短路问题 计算几何_Floyd_线段交
第一次写计算几何,还是很开心的吧(虽然题目好水qaq) 暴力枚举端点,暴力连边即可 用线段交判一下是否可行. Code: #include <cstdio> #include <al ...
- ACM/ICPC 之 DP解有规律的最短路问题(POJ3377)
//POJ3377 //DP解法-解有规律的最短路问题 //Time:1157Ms Memory:12440K #include<iostream> #include<cstring ...
- ACM 房间安排
房间安排 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 2010年上海世界博览会(Expo2010),是第41届世界博览会.于2010年5月1日至10月31日期间, ...
- 房间安排-nyoj168
描述 2010年上海世界博览会(Expo2010),是第41届世界博览会.于2010年5月1日至10月31日期间,在中国上海市举行.本次世博会也是由中国举办的首届世界博览会.上海世博会以“城市,让生活 ...
- 房间声学原理与Schroeder混响算法实现
一.混响时间的计算与预测 所谓混响就是声音的直达声与反射声很紧凑的重合在一起时人耳所听到的声音,这个效果在语音的后期处理时特别有用.能产生混响最常见的场景就是房间内,尤其是空旷的房间中. 混响有直达声 ...
随机推荐
- phpmywind调用方法大全
头部文件调用 <?php require_once('header.php'); ?> 底部文件调用 <?php require_once('footer.php'); ?> ...
- C++类型转换 -- 由其他类型转换到自定义类型
由其他类型转换到自定义类型 由其他类型(如int,double)向自定义类的转换是由构造函数来实现,只有当类的定义和实现中提供了合适的构造函数,转换才能通过. /******************* ...
- pycharm设置字体大小
pycharm 是很好的一个IDE,在windows下,和macOS下,都能很好的运行.唯一缺点是启动慢. 默认字体太小,在mac下,需要瞪大24K氪金狗眼才能看清. 为了保护好眼睛,我们需要把字体调 ...
- Linux下帮助命令
帮助命令(各种命令区别) 最常用的帮助命令 help --help help cd 查看内置命令的使用 info man help cd 查看内置命令的使用 获得帮助的途径: ma ...
- mysql的一些规范
我司的mysql规范,值得牢记 一.禁止内容 表字段类型 不推荐使用enum,set,blob,text等类型 表中所有字段都不能为空,需要设置not null属性,可以给默认值 表的主键列值禁止被更 ...
- 一个python爬虫工具类
写了一个爬虫工具类. # -*- coding: utf-8 -*- # @Time : 2018/8/7 16:29 # @Author : cxa # @File : utils.py # @So ...
- [转载]hazard pointer
hazard pointer 转载自: http://hi.baidu.com/rodimus/item/f6539cc179894f2f47d5c0ef 这是用于解决多线程并发下内存的回收,一块内存 ...
- C++——sort和stable_sort的若干区别
版权声明:本文系作者原创,转载请注明出处. C++中sort和stable_sort的区别: sort是快速排序实现,因此是不稳定的:stable_sort是归并排序实现,因此是稳定的: 对于相等的元 ...
- django 项目中的 favicon.ico 处理
django 项目中的 favicon.ico 处理 (django == 2.0.6) 1. 引入模块: from django.views.generic.base import Redirec ...
- 次短路经(dijsktra)
#include <cstdio>#include <cstring>#include <queue>#include <algorithm>#defi ...