poj 1127 Jack Straws(计算几何)
来源:互联网 发布:擎洲广达软件下载 编辑:程序博客网 时间:2024/05/16 11:24
题意大致就是给你n根木棍还有它们的端点坐标,每次一个询问,问第i根和第j根木棍是否相连(就是是否两条线段存在交点),能够通过其它木棍相连也视为相连
这里用到了内积和外积的知识,也就是点积和叉积
比如给定一个直线p1-p2如果(p1-q)与(p2-p)的外积,也就是(p1-q).det(p2-q)==0那么就可以判断这个点在p1-p2的这条直线上,接下来判断
内积(p1-q).dot(p2-q)<=0 就说明点q在点p1到点p2之间,也就是在线段上。
本题要注意的一点就是如果两条线段平行要特判,分为两种情况相交和不相交
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<vector>using namespace std;double EPS = 1e-10;double add(double a,double b){ if(abs(a+b)<EPS*(abs(a)+abs(b))) return 0; 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 det(P p){ return add(x*p.y,-y*p.x); } double dot(P p){ return add(x*p.x,y*p.y); }};bool on_seg(P p1,P p2,P q){ return (p1-q).det(p2-q)==0 && (p1-q).dot(p2-q)<=0;}P in(P p1,P p2,P q1,P q2){ return p1+ (p2-p1) *( (q2-q1).det(q1-p1) / (q2-q1).det(p2-p1) );}bool g[200][200];int main(){ // freopen("kepin.txt","r",stdin); // freopen("output.txt","w",stdout); int n; P p[200],q[200]; while(~scanf("%d",&n) && n){ // memset(g,0,sizeof(g)); for(int i=0;i<n;i++){ scanf("%lf%lf%lf%lf",&p[i].x,&p[i].y,&q[i].x,&q[i].y); } for(int i=0;i<n;i++){ g[i][i]=1; for(int j=0;j<i;j++){ if((p[i]-q[i]).det(p[j]-q[j])==0){ g[i][j] = g[j][i] = on_seg(p[i],q[i],p[j])+on_seg(p[i],q[i],q[j])+on_seg(p[j],q[j],p[i])+on_seg(p[j],q[j],q[i]); } else{ P r=in(p[i],q[i],p[j],q[j]); g[i][j] = g[j][i] = on_seg(p[i],q[i],r) && on_seg(p[j],q[j],r); } } } for(int k=0;k<n;k++){ for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ g[i][j] |= g[i][k] && g[k][j]; } } } int a,b; while(~scanf("%d%d",&a,&b) && !(a==b && b==0)){ if(g[a-1][b-1]) printf("CONNECTED\n"); else printf("NOT CONNECTED\n"); } } return 0;}
0 0
- poj 1127 Jack Straws(计算几何)
- POJ 1127 Jack Straws (计算几何)
- POJ 1127 Jack Straws [计算几何]
- POJ 1127-Jack Straws(计算几何 线段相交)
- 【计算几何】 POJ 1127 Jack Straws 判断线段是否相交
- poj 1127 Jack Straws (人生第一道计算几何)
- 挑战程序设计 &&计算几何&&POJ.1127 Jack Straws
- POJ 1127Jack Straws (计算几何 + 线段相交)
- poj 1127 Jack Straws 计算几何 flod-warshall
- poj 1127 Jack Straws 几何 + 弗洛伊德
- POJ 1127 Jack Straws
- poj 1127 Jack Straws
- poj 1127 Jack Straws
- poj--1127 Jack Straws
- poj 1127 Jack Straws
- Jack Straws Poj 1127
- 计算几何+并查集处理:POJ 1127 Jack Straws
- POJ1127——Jack Straws(计算几何,直线相交)
- 路虎:完美设计彰显奢华人生
- GridView添加HeadView
- dwz 两个dialog窗口传值
- 在Eclipse中使用JUnit4进行单元测试(高级篇)
- 导入jquery的路径
- poj 1127 Jack Straws(计算几何)
- Nutch2 WebPage 字段解释
- WindowManager.LayoutParams 详解(转载)
- 16个经典面试问题及回答思路
- 路虎:完美设计彰显奢华人生
- 图像处理库(FreeImage)
- Android入门学习笔记(三)|Activity和Intent
- 进程之间数据共享
- 一天半夜,一个人在马上走遇到了警察叔叔