题目大意:

给定n条线段

接下来n行是端点信息

接下来询问 a b 是否相交

若a与c相交 b与c相交 ,那么a与b就是相交的

先判断任两条线段是否相交 再用folyd

#include <cstdio>
#include <cmath>
#include <algorithm>
#include <stdio.h>
#include <string.h>
using namespace std;
const double eps = 1e-; double add(double a,double b) {
if(abs(a+b)<eps*(abs(a)+abs(b))) return ;
return a+b;
} // 考虑误差
struct P {
double x,y;
P(){};
P(double _x,double _y):x(_x),y(_y){}
P operator -(P p) {
return P(add(x,-p.x),add(y,-p.y)); };
P operator +(P p) {
return P(add(x,p.x),add(y,p.y)); };
P operator *(double d) {
return P(x*d,y*d); };
double dot(P p) {
return add(x*p.x,y*p.y); };
double det(P p) {
return add(x*p.y,-y*p.x); };
};
// c在直线ab上 外积==0,c在ab两点之间 内积<=0
bool onSeg(P a,P b,P c)
{
return (a-c).det(b-c)== && (a-c).dot(b-c)<=;
} // 求两直线ab与cd交点
/*
设直线ab上点为 a+(b-a)t,t为变量
交点需满足在直线cd上 则(d-c)*(a+t(b-a)-c)=0(外积)
分解为加减式子 将t放在等号左边 其他放在右边
化简推导得t=(d-c)*(c-a)/(d-c)*(b-a)
则交点为a+(b-a)*((d-c)*(c-a)/(d-c)*(b-a))
*/
P ins(P a,P b,P c,P d)
{
return a+(b-a)*((d-c).det(c-a)/(d-c).det(b-a));
} bool insSS(P a,P b,P c,P d)
{
if((a-b).det(c-d)==) //平行
return onSeg(a,b,c) || onSeg(a,b,d)
|| onSeg(c,d,a) || onSeg(c,d,b);
else {
P t=ins(a,b,c,d);
return onSeg(a,b,t) && onSeg(c,d,t);
}
} int main()
{
int n,x,y;
bool G[][];
P p[],q[];
while(~scanf("%d",&n)) {
if(n==) break;
for(int i=;i<n;i++)
scanf("%lf%lf%lf%lf",&p[i].x,&p[i].y,&q[i].x,&q[i].y); memset(G,,sizeof(G));
for(int i=;i<n;i++) {
G[i][i]=;
for(int j=;j<i;j++)
G[i][j]=G[j][i]=insSS(p[i],q[i],p[j],q[j]);
} for(int i=;i<n;i++)
for(int j=;j<n;j++)
for(int k=;k<n;k++)
G[j][k] |= G[j][i]&&G[i][k]; while(~scanf("%d%d",&x,&y)) {
if(x+y==) break;
if(G[--x][--y]) printf("CONNECTED\n");
else printf("NOT CONNECTED\n");
}
} return ;
}

POJ 1127 /// 判断线段与线段是否相交的更多相关文章

  1. Segments - POJ 3304 (判断直线与线段是否相交)

    题目大意:给出一些线段,然后判断这些线段的投影是否有可能存在一个公共点.   分析:如果这些线段的投影存在一个公共点,那么过这个公共点作垂线一定与所有的直线都想交,于是题目转化成是否存在一个直线可以经 ...

  2. POJ 2074 /// 判断直线与线段相交 视野盲区

    题目大意: 将所有物体抽象成一段横向的线段 给定房子的位置和人行道的位置 接下来给定n个障碍物的位置 位置信息为(x1,x2,y) 即x1-x2的线段 y相同因为是横向的 求最长的能看到整个房子的一段 ...

  3. poj 1127 -- Jack Straws(计算几何判断两线段相交 + 并查集)

    Jack Straws In the game of Jack Straws, a number of plastic or wooden "straws" are dumped ...

  4. POJ 3304 Segments (判断直线与线段相交)

    题目链接:POJ 3304 Problem Description Given n segments in the two dimensional space, write a program, wh ...

  5. POJ 3304 Segments(判断直线与线段是否相交)

    题目传送门:POJ 3304 Segments Description Given n segments in the two dimensional space, write a program, ...

  6. 判断直线与线段相交 POJ 3304 Segments

    题意:在二维平面中,给定一些线段,然后判断在某直线上的投影是否有公共点. 转化,既然是投影,那么就是求是否存在一条直线L和所有的线段都相交. 证明: 下面给出具体的分析:先考虑一个特殊的情况,即n=1 ...

  7. poj 2653 线段与线段相交

    Pick-up sticks Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 11884   Accepted: 4499 D ...

  8. poj 1269 线段与线段相交

    Intersecting Lines Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 13605   Accepted: 60 ...

  9. POJ 1039 Pipe【经典线段与直线相交】

    链接: http://poj.org/problem?id=1039 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22013#probl ...

随机推荐

  1. 在命令行窗口中输入EOF

    在Windows中,要输入EOF前,先回车换行,再ctrl+z,在回车,即可.

  2. Java——对象

    1.2对象 1.2.1 对象的创建和使用 ①使用new + 构造器创建一个新的对象: ②使用“对象名.对象成员”的方式访问对象成员(包括属性和方法). public class Animal { pu ...

  3. Struts功能详解——ValidatorForm

    ActionForm和ValidatorForm区别:       一个Form继承了ValidatorForm 就不用写具体的验证,但是需要提供:validation-rules.xml 和 val ...

  4. Lua的控制流程

    一.条件语句 if语句 if语句是由一个布尔表达式作为条件判断,或者紧跟其他语句组成. if else语句 if语句可以是else搭配使用,在if条件表达式为false时执行else语句代码 if嵌套 ...

  5. NX二次开发-UFUN创建镜像体UF_MODL_create_mirror_body

    NX11+VS2013 #include <uf.h> #include <uf_modl.h> UF_initialize(); //创建块 UF_FEATURE_SIGN ...

  6. mysql最新版与mysql5.6的兼容问题

    最近公司在给别的企业打了一个项目,在公司本地使用的是mysql 5.6,但是搭建的项目的mysql版本是最新版5.7以后吧,所以有些sql在执行上出了一点问题 目前发现的是: 1: 在5.6版本下先o ...

  7. bootstrap中container和container-fluid的区别

    container和container-fluid 在bootstrap中,两者都是设置文本居中,但是它们还是有很大差别的 container 是随屏幕宽度的变化而变化的,是阶段性变化,有一个随浏览器 ...

  8. IntelliJ IDEA创建springboot项目

    1.创建新项目. 2. 3.Group 是包名,Artifact是项目名. 4.springboot版本尽量选择最高版本,且不要选择SNAPSHOP版本. 5.路径可自定义,默认为D://IDEA/M ...

  9. JDBC_事务说明

    JDBC控制事务:1.事务:一个包含多个步骤的业务操作,如果这个业务操作被事务管理则多个步骤同时成功或同时失败2.操作: 1.开启事务 2.提交事务 3.回滚事务3.使用Connection对象来管理 ...

  10. springcloud eureka server 检测 eureka client 状态

    import com.netflix.discovery.shared.Applications; import com.netflix.eureka.EurekaServerContextHolde ...