浏览器标题切换
浏览器标题切换end

HDU2150-Pipe-判断线段是否相交

题意:

给出一条管道的几个点(是折线),判断管道之间是否有相交,

 

思路:

把每条管道的折线形式分为一个个线段,每条管道的线段和其他管道的线段进行枚举判断

说白了就是:判断线段是否相交,也是模板题

 

AC代码:

复制代码
 1 #include<iostream>
 2 #include<algorithm>
 3 #include<stdio.h>
 4 #include<queue>
 5 #include<string.h>
 6 using namespace std;
 7 
 8 struct node
 9 {
10     int x,y;
11 }a[35][110];
12 int k[35];
13 
14 int cc(node a,node b,node c)//计算叉乘:BA叉乘CA
15 {
16     return (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x);
17 }
18 
19 bool judge(node a,node b,node c,node d)//判断两线段是否相交
20 {
21     //快速排斥法
22     int x=min(a.y,b.y)<=max(c.y,d.y);
23     int y=min(c.y,d.y)<=max(a.y,b.y);
24     int z=min(c.x,d.x)<=max(a.x,b.x);
25     int w=min(a.x,b.x)<=max(c.x,d.x);
26     //跨立实验法
27     int p=cc(a,b,c)*cc(a,d,b);
28     int q=cc(a,c,d)*cc(b,d,c);
29     if(x&&y&&z&&w&&p>=0&&q>=0)
30         return 1;
31     return 0;
32 }
33 
34 int main()
35 {
36     int n;
37     while(~scanf("%d",&n))
38     {
39         for(int i=0;i<n;i++)
40         {
41             scanf("%d",&k[i]);
42             for(int j=0;j<k[i];j++)
43                 scanf("%d %d",&a[i][j].x,&a[i][j].y);
44 
45         }
46         if(n==1)
47         {
48             printf("No\n");
49             continue;
50         }
51         bool flag=0;
52         for(int i=0;i<n-1;i++)
53         {
54             for(int j=1;j<k[i];j++)
55             {
56                 for(int pp=i+1;pp<n;pp++)
57                 {
58                     for(int qq=1;qq<k[pp];qq++)
59                     {
60                         if(judge(a[i][j-1],a[i][j],a[pp][qq-1],a[pp][qq]))
61                         {
62                             flag=1;
63                             break;
64                         }
65                     }
66                 }
67             }
68         }
69         if(flag)
70             printf("Yes\n");
71         else
72             printf("No\n");
73     }
74     return 0;
75 }
View Code
复制代码

 

posted @   抓水母的派大星  阅读(158)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示