poj1556The Doors

链接

枚举两点 若不和任何线段相交 建边为dis(i,j) floyd求最短路

  1 #include <iostream>
  2 #include<cstdio>
  3 #include<cstring>
  4 #include<algorithm>
  5 #include<stdlib.h>
  6 #include<vector>
  7 #include<cmath>
  8 #include<queue>
  9 #include<set>
 10 using namespace std;
 11 #define N 100
 12 #define LL long long
 13 #define INF 0xfffffff
 14 const double eps = 1e-8;
 15 const double pi = acos(-1.0);
 16 const double inf = ~0u>>2;
 17 struct point
 18 {
 19     double x,y;
 20     point(double x=0,double y=0):x(x),y(y){}
 21 }p[N];
 22 struct line
 23 {
 24     point u,v;
 25 }li[N];
 26 double w[N][N];
 27 typedef point pointt;
 28 pointt operator - (point a,point b)
 29 {
 30     return pointt(a.x-b.x,a.y-b.y);
 31 }
 32 int dcmp(double x)
 33 {
 34     if(fabs(x)<eps) return 0;
 35     return x<0?-1:1;
 36 }
 37 double dis(point a)
 38 {
 39     return sqrt(a.x*a.x+a.y*a.y);
 40 }
 41 double cross(point a,point b)
 42 {
 43     return a.x*b.y-a.y*b.x;
 44 }
 45 bool segprointer(point a1,point a2,point b1,point b2)
 46 {
 47     double c1 = cross(a2-a1,b1-a1),c2 = cross(a2-a1,b2-a1),
 48     c3  = cross(b2-b1,a1-b1),c4 = cross(b2-b1,a2-b1);
 49     return dcmp(c1)*dcmp(c2)<0&&dcmp(c3)*dcmp(c4)<0;
 50 }
 51 int main()
 52 {
 53     int n,i,j,k;
 54     while(scanf("%d",&n)!=EOF)
 55     {
 56         if(n==-1) break;
 57         int g = 0;
 58         for(i = 1; i <= 100 ; i++)
 59         {
 60             for(j = 1;  j<= 100 ; j++)
 61             w[i][j] = INF;
 62             w[i][i] = 0;
 63         }
 64         int o = 0;
 65         for(i = 1; i <= n ;i++)
 66         {
 67             double k;
 68             scanf("%lf",&k);
 69             for(j = 1; j <= 4; j++)
 70             {
 71                 p[++g].x = k;
 72                 scanf("%lf",&p[g].y);
 73             }
 74             point pp = point(k,0);
 75             li[++o].u = pp;
 76             li[o].v = p[g-3];
 77             li[++o].u = p[g-2];
 78             li[o].v = p[g-1];
 79             li[++o].u = p[g];
 80             pp = point(k,10);
 81             li[o].v = pp;
 82         }
 83         p[g+1] = point(0,5);
 84         p[g+2] = point(10,5);
 85         //printf("%d\n",segprointer(p[g+1],p[g+2],li[5].u,li[5].v));
 86         for(i = 1; i <= g+2; i++)
 87             for(j = i+1; j <= g+2; j++)
 88             {
 89                 if(i==j) continue;
 90                 for(k = 1; k <= o ; k++)
 91                 {
 92                     if(segprointer(p[i],p[j],li[k].u,li[k].v))break;
 93
 94                 }
 95                 if(k>o)
 96                 w[i][j] = w[j][i] = dis(p[i]-p[j]);
 97                 //printf("%.2f %.2f %.2f %.2f %.2f\n",p[i].x,p[i].y,p[j].x,p[j].y,w[i][j]);
 98             }
 99         for(i = 1; i <= g+2 ; i++)
100             for(j = 1; j <=g+2 ;j++)
101                 for(k = 1; k <= g+2 ; k++)
102                 w[j][k] = min(w[j][i]+w[i][k],w[j][k]);
103         printf("%.2f\n",w[g+1][g+2]);
104     }
105     return 0;
106 }

poj1556The Doors,布布扣,bubuko.com

时间: 2024-10-13 12:17:05

poj1556The Doors的相关文章

ACM/ICPC 之 最短路径-Bellman Ford范例(POJ1556-POJ2240)

两道Bellman Ford解最短路的范例,Bellman Ford只是一种最短路的方法,两道都可以用dijkstra, SPFA做. Bellman Ford解法是将每条边遍历一次,遍历一次所有边可以求得一点到任意一点经过一条边的最短路,遍历两次可以求得一点到任意一点经过两条边的最短路...如 此反复,当遍历m次所有边后,则可以求得一点到任意一点经过m条边后的最短路(有点类似离散数学中邻接矩阵的连通性判定) POJ1556-The Doors 初学就先看POJ2240吧 题意:求从(0,5)到

卓越管理的秘密(Behind Closed Doors)

或许提到本书甚至本书的作者Johanna Rothman我们会感到些许陌生,那么提起她的另一本获得素有软件界奥斯卡之称的Jolt生产效率大奖的名著<项目管理修炼之道>,会不会惊讶的发现,原来是她! 很久以前就买了英文版的Behind Closed Doors: Secrets of Great Management一书(中文版为<门后的秘密:卓越管理的故事>),可惜当时并没有引起足够的重视,草草翻阅后便束之高阁.开始的印象就是一本以故事叙述为主的工作场景再现,配以总结的若干管理技巧

The Doors 最短路 + 简单几何

The Doors 题目抽象:给你一些点,和一些阻碍连边的线段.问原点到终点最短的几何距离. 分析:预处理见图之后,跑最短路. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 using namespace std; 6 const int INF = 0X5FFFFFFF; 7 const int MS = 1005; 8 const i

Poj 1556 The Doors 计算几何+最短路

其实本题非常的无脑,无脑拍完1A,写到blog里只因为TM无脑拍也拍了很久啊= = #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <climits> #include <string> #include <iostream> #include <map> #include <cstdl

locker doors

1 #include <math.h> 2 #include <stdio.h> 3 int f(int n) 4 { 5 int i, t, r = 0, q = (int)sqrt(n);//开方了 6 for (i=1; i<=q; ++i) 7 { 8 if (n%i == 0) 9 { 10 t = n/i; 11 if (t != i) 12 { 13 r += 2; 14 } 15 else 16 { 17 ++r; 18 } 19 } 20 } 21 retu

POJ 1556 - The Doors 线段相交不含端点

POJ 1556 - The Doors题意:    在 10x10 的空间里有很多垂直的墙,不能穿墙,问你从(0,5) 到 (10,5)的最短距离是多少.    分析:        要么直达,要么一定是墙的边缘点之间以及起始点.终点的连线.        所以先枚举墙上每一点到其他点的直线可达距离,就是要判定该线段是否与墙相交(不含端点).        然后最短路. 1 #include <iostream> 2 #include <cstdio> 3 #include &l

IBM Rational DOORS通过DXL进行二次开发初试(2)

1.如果是在Module模块菜单添加功能只需要在:C:\Program Files(x86)\IBM\Rational\DOORS\9.3\lib\dxl\addins\user路径下找到相应user.dxl添加具体功能代码,原dxl文件结构不要更改,必须有/**/注释部分,在idx中定义功能的名称,例如fn n_function,fn为你的dxl文件名称,n为热键勿与其他热键重复,function为DOORS菜单栏显示的名称..hlp文件可以不做任何修改. 2.如果是在Database 界面的

【DOORS】产品功能介绍

引言 据权威组织调查结果显示,项目的成功与失败与项目的需求息息相关.高效的需求管理有助于降低由于需求原因导致的项目失败风险,提高项目成功的几率.随着人们对需求管理认识水平的不断提高,越来越多的企业开始重视需求管理领域.同样,由于商业价值的驱动,也推动了商业化需求管理支撑工具的诞生.其中,本次文章的主角-DOORS就是这样一款出色的商业化的需求管理工具. 背景 DOORS,全称 "Dynamic Object Oriented Requirment System",即 "面向动

[日常摸鱼]UVA393 The Doors 简单计算几何+最短路

The  Boy Next   Doors 题意:给定一个固定大小的房间($x,y$的范围都是$[0,10]$),有$n$个墙壁作为障碍(都与横坐标轴垂直),每个墙壁都有两扇门分别用四个点来描述,起点终点固定在$(0,5)$和$(10,5)$,求起点到终点的最短路长度,$n<=18$ 题解: 我们把每堵墙的每一"段"作为一条线段,对任意两点$u,v$,如果两点间的连线不和其他线段相交,那我们从$u$走到$v$的最短距离就是他们的欧几里得距离,对所有点对都这么做一遍,处理出所有能够