P1354 房间最短路问题(建图&最短路)
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1354 房间最短路问题(建图&最短路)相关的知识,希望对你有一定的参考价值。
P1354 房间最短路问题(建图&最短路)
建图跑最短路就行了,两点加边时特判下是否有墙挡住了。这里用floyd就可以过了
// Problem: P1354 房间最短路问题
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P1354
// Memory Limit: 125 MB
// Time Limit: 1000 ms
// Date: 2021-07-23 14:11:44
// --------by Herio--------
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=1e3+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a,b) memset(a,b,sizeof a)
#define PII pair<int,int>
#define fi first
#define se second
#define pb emplace_back
#define SZ(a) (int)a.size()
#define ios ios::sync_with_stdio(false),cin.tie(0)
void Print(int *a,int n){
for(int i=1;i<n;i++)
printf("%d ",a[i]);
printf("%d\\n",a[n]);
}
struct node{
double x,b[5];
}p[N];
int n;
bool ck(double y,node &u){
return (y>=u.b[1]&&y<=u.b[2])||(y>=u.b[3]&&y<=u.b[4]);
}
double dis(double x1,double y1,double x2,double y2){
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
bool fun(int i,int j,int k,int l){
if(j-i<2) return true;
double x1=p[i].x,x2=p[j].x,y1=p[i].b[k],y2=p[j].b[l];
double kk=(y1-y2)/(x1-x2),t=y1-kk*x1;
for(int w=i+1;w<j;w++){
double tmp=kk*p[w].x+t;
if(!ck(tmp,p[w])) return false;
}
return true;
}
int id(int x,int y){
return x*4+y;
}
double d[N][N];
void add(int i,int j,int k,int l){
if(!fun(i,j,k,l)) return;
double x1=p[i].x,x2=p[j].x,y1=p[i].b[k],y2=p[j].b[l];
d[id(i,k)][id(j,l)]=d[id(j,l)][id(i,k)]=dis(x1,y1,x2,y2);
}
int main(){
scanf("%d",&n);for(int i=1;i<=n;i++){
scanf("%lf",&p[i].x);
for(int j=1;j<5;j++) scanf("%lf",&p[i].b[j]);
}
p[0].x=0,p[++n].x=10;
mst(d,127);
for(int i=1;i<5;i++) p[0].b[i]=p[n].b[i]=5;
for(int i=0;i<=n;i++)
for(int j=i+1;j<=n;j++)
for(int k=1;k<5;k++)
for(int l=1;l<5;l++) add(i,j,k,l);
int tot=4*(n+1);
for(int i=1;i<=tot;i++) d[i][i]=0;
for(int k=1;k<=tot;k++)
for(int i=1;i<=tot;i++)
for(int j=1;j<=tot;j++){
d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
}
printf("%.2f\\n",d[1][tot]);
return 0;
}
以上是关于P1354 房间最短路问题(建图&最短路)的主要内容,如果未能解决你的问题,请参考以下文章
POJ 2502 Subway ( 最短路 && 最短路建图 )
[最短路] aw920. 最优乘车(单源最短路建图+bfs最短路模型+知识理解+好题)
CSU 1333 & Uva 12661 Funny Car Racing最短路变形+spfa算法,链式前向星建图
[最短路] aw903. 昂贵的聘礼(单源最短路建图+超级源点+知识理解+好题)