题目

在一个长宽均为10,入口出口分别为(0,5),(10,5)的房间里有几堵墙,

每堵墙上有两个缺口,求入口到出口的最短路径。


分析

暴力建图,判断两个点是否有墙堵住,

可以求斜率然后判断所交点不能在墙上

在这里,你甚至可以用floyd求单源最短路


代码

#include <cstdio>
#include <cmath>
#include <map>
#define rr register
#define o(x) ((x)*(x))
using namespace std;
typedef double db; typedef pair<db,db> pdd;
const pdd St=make_pair(0.0,5.0),Ed=make_pair(10.0,5.0);
struct five{db x,y[4];}a[21]; db dis[83][83];
int n,st,ed,CNT; map<pdd,int>uk;
inline void Min(db &x,db y){x=x<y?x:y;}
inline bool against(db Xx,db Xy,db Yx,db Yy,int pl,int pr){
rr db K=(Yy-Xy)/(Yx-Xx),B=Xy-K*Xx;
for (rr int i=pl;i<=pr;++i){
rr db YY=K*a[i].x+B;
if (YY<a[i].y[0]||(a[i].y[1]<YY&&YY<a[i].y[2])||a[i].y[3]<YY) return 1;
}
return 0;
}
inline void Check(db Xx,db Xy,db Yx,db Yy,int pl,int pr){
if (against(Xx,Xy,Yx,Yy,pl,pr)) return;
rr pdd t1=make_pair(Xx,Xy),t2=make_pair(Yx,Yy);
if (!uk[t1]) uk[t1]=++CNT; if (t1==St) st=uk[t1];
if (!uk[t2]) uk[t2]=++CNT; if (t2==Ed) ed=uk[t2];
dis[uk[t1]][uk[t2]]=dis[uk[t2]][uk[t1]]=sqrt(o(Yx-Xx)+o(Yy-Xy));
}
signed main(){
scanf("%d",&n);
for (rr int i=1;i<83;++i)
for (rr int j=1;j<83;++j)
if (i!=j) dis[i][j]=1e9;
for (rr int i=1;i<=n;++i)
scanf("%lf%lf%lf%lf%lf",&a[i].x,&a[i].y[0],&a[i].y[1],&a[i].y[2],&a[i].y[3]);
Check(0.0,5.0,10.0,5.0,1,n);
for (rr int i=1;i<=n;++i)
for (rr int j=0;j<4;++j)
Check(0.0,5.0,a[i].x,a[i].y[j],1,i-1),
Check(a[i].x,a[i].y[j],10.0,5.0,i+1,n);
for (rr int i=1;i<n;++i) for (rr int i1=0;i1<4;++i1)
for (rr int j=i+1;j<=n;++j) for (rr int j1=0;j1<4;++j1)
Check(a[i].x,a[i].y[i1],a[j].x,a[j].y[j1],i+1,j-1);
for (rr int k=1;k<=CNT;++k)
for (rr int i=1;i<=CNT;++i)
for (rr int j=1;j<=CNT;++j)
if (k!=i&&k!=j&&i!=j)
Min(dis[i][j],dis[i][k]+dis[k][j]);
return !printf("%.2lf",dis[st][ed]);
}

#floyd,斜率#洛谷 1354 房间最短路问题的更多相关文章

  1. luogu 1354 房间最短路问题 线段与直线相交 最短路

    题目链接 题目描述 在一个长宽均为10,入口出口分别为(0,5).(10,5)的房间里,有几堵墙,每堵墙上有两个缺口,求入口到出口的最短路经. 输入输出格式 输入格式: 第一排为n(n<=20) ...

  2. 洛谷P2402 奶牛隐藏(网络流,二分答案,Floyd)

    洛谷题目传送门 了解网络流和dinic算法请点这里(感谢SYCstudio) 题目 题目背景 这本是一个非常简单的问题,然而奶牛们由于下雨已经非常混乱,无法完成这一计算,于是这个任务就交给了你.(奶牛 ...

  3. 洛谷.4655.[CEOI2017]Building Bridges(DP 斜率优化 CDQ分治)

    LOJ 洛谷 \(f_i=s_{i-1}+h_i^2+\min\{f_j-s_j+h_j^2-2h_i2h_j\}\),显然可以斜率优化. \(f_i-s_{i-1}-h_i^2+2h_ih_j=f_ ...

  4. 洛谷P4072 [SDOI2016]征途(带权二分,斜率优化)

    洛谷题目传送门 一开始肯定要把题目要求的式子给写出来 我们知道方差的公式\(s^2=\frac{\sum\limits_{i=1}^{m}(x_i-\overline x)^2}{m}\) 题目要乘\ ...

  5. 洛谷P3628 [APIO2010]特别行动队(动态规划,斜率优化,单调队列)

    洛谷题目传送门 安利蒟蒻斜率优化总结 由于人是每次都是连续一段一段地选,所以考虑直接对\(x\)记前缀和,设现在的\(x_i=\)原来的\(\sum\limits_{j=1}^ix_i\). 设\(f ...

  6. 洛谷P2900 [USACO08MAR]土地征用Land Acquisition(动态规划,斜率优化,决策单调性,线性规划,单调队列)

    洛谷题目传送门 用两种不一样的思路立体地理解斜率优化,你值得拥有. 题意分析 既然所有的土地都要买,那么我们可以考虑到,如果一块土地的宽和高(其实是蒟蒻把长方形立在了平面上)都比另一块要小,那么肯定是 ...

  7. 洛谷P4589 [TJOI2018]智力竞赛 【floyd + 二分 + KM】

    题目链接 洛谷P4589 题意可能不清,就是给出一个带权有向图,选出\(n + 1\)条链,问能否全部点覆盖,如果不能,问不能覆盖的点权最小值最大是多少 题解 如果要问全部覆盖,就是经典的可重点的DA ...

  8. 【洛谷3648/BZOJ3675】[APIO2014]序列分割(斜率优化DP)

    题目: 洛谷3648 注:这道题洛谷3648有SPJ,要求输出方案.BZOJ3675数据组数较多但不要求输出方案. 分析: 这可能是我第三次重学斜率优化了--好菜啊 这道题首先一看就是个DP.稍微推一 ...

  9. 洛谷P2365 任务安排(斜率优化dp)

    传送门 思路: 最朴素的dp式子很好考虑:设\(dp(i,j)\)表示前\(i\)个任务,共\(j\)批的最小代价. 那么转移方程就有: \[ dp(i,j)=min\{dp(k,j-1)+(sumT ...

  10. 斜率优化dp学习笔记 洛谷P3915[HNOI2008]玩具装箱toy

    本文为原创??? 作者写这篇文章的时候刚刚初一毕业…… 如有错误请各位大佬指正 从例题入手 洛谷P3915[HNOI2008]玩具装箱toy Step0:读题 Q:暴力? 如果您学习过dp 不难推出d ...

随机推荐

  1. OFDM系统各种调制阶数的QAM误码率(Symbol Error Rate)与 误比特率(Bit Error Rate)仿真结果

    本文是OFDM系统的不同QAM调制阶数的误码率与误比特率仿真,仅考虑在高斯白噪声信道下的情景,着重分析不同信噪比下的误码(符号)率性能曲线,不关心具体的调制与解调方案,仿真结果与理论的误码率曲线进行了 ...

  2. 【LeetCode剑指offer#04】包含min函数的栈、栈的压入、弹出序列(辅助栈的应用)

    包含min函数的栈 https://leetcode.cn/problems/bao-han-minhan-shu-de-zhan-lcof/ 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元 ...

  3. 【Azure App Service】App Service设置访问限制后,使用git clone代码库出现403报错

    问题描述 在App Service中,为App Service配置了访问限制,结果导致在克隆App Service的代码时候,遇见403错误. 问题解答 因为在使用 git clone App Ser ...

  4. 了解 Docker 网络

    本章将会简单地讲述 Docker 中的网络,对于 CNM.Libnetwork 这些,限于笔者个人水平,将不会包含在内. Docker 的四种网络模式 Docker 有 bridge.none.hos ...

  5. 聊聊图数据库和图数据库的小知识 Vol.02

    2010 年前后,对于社交媒体网络研究的兴起带动了图计算的大规模应用. 2000 年前后热门的是 信息检索 和 分析 ,主要是 Google 的带动,以及 Amazon 的 e-commerce 所用 ...

  6. php7中的三元运算符的区别

    <?php $tmparr = ['cover'=>'http://img.immomo.com.cn']; echo isset($tmparr['cover'])."\n&q ...

  7. maven打包出现 ����applets.user.service.UserService����-2022新项目

    一.问题由来 新项目的框架刚搭建好,还不能正常的运行,我们这边就开始写代码,因为项目还在设计阶段,很多东西比如说需求 都还在讨论之中.分层架构采用的是cola4.0的架构,具体的代码由我们自己来进行实 ...

  8. 创建 nest-websocket 服务 用于mock单点登录开发

    需求 有个单点登录的任务,但是都是现场的服务 api 和 websocket 都在现在 开发本机mock服务 本地搭建环境先模拟一下 资料 NestJS WebSocket 开始使用 https:// ...

  9. ReACT介绍与llama_index ReActAgent实践

    Agent是大模型的重要应用方向,而ReACT是学术界提出的重要方法,本文介绍ReACT论文,然后通过llama_index ReActAgent来分析ReACT的执行过程. ReACT <RE ...

  10. WPF之命令

    目录 命令系统的基本元素 基本元素之间的关系 小试命令 WPF的命令库 命令参数 命令与Binding的结合 近观命令 ICommand接口与RoutedCommand 自定义Command 定义命令 ...