Jack Straws 线段相交加并查集

本文探讨了并查集数据结构在几何图形交叉检测中的应用,并详细介绍了算法实现过程,包括最大最小距离计算、多边形面积计算及交叉判断逻辑。
/*开始的时候并查集写错了。就是有传递闭包的关系。不错的一个题。*/

#include <stdio.h>
#define eps 1e-8
double max(double a,double b)
{
    if(b-a<-eps) return a;
    else return b;
}
double min(double a,double b)
{
    if(b-a<-eps) return b;
    else return a;
}
struct point
{
    double x,y;
};
struct LINE
{
    point p1,p2;
}line[14];
int f[14];
double multi(point p0,point p1,point p2)
{
    return ((p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y));
}
bool cross(LINE a,LINE b)
{
    if(min(a.p1.x,a.p2.x)-max(b.p1.x,b.p2.x)<eps
            &&min(a.p1.y,a.p2.y)-max(b.p1.y,b.p2.y)<eps
            &&min(b.p1.x,b.p2.x)-max(a.p1.x,a.p2.x)<eps
            &&min(b.p1.y,b.p2.y)-max(a.p1.y,a.p2.y)<eps
            &&multi(a.p1,a.p2,b.p1)*multi(a.p1,a.p2,b.p2)<=eps
            &&multi(b.p1,b.p2,a.p1)*multi(b.p1,b.p2,a.p2)<=eps)
        return true;
    else return false;
}
int find(int x)
{
    if(x!=f[x])
        f[x]=find(f[x]);
    return f[x];
}
void unit(int x,int y)
{
    x=find(x);
    y=find(y);
    if(x==y) return ;
    else f[y]=x;
}
int main()
{
    int n,r,t;
    while(scanf("%d",&n)==1&&n)
    {
        for(int i=1; i<=n; i++)
            f[i]=i;
        for(int i=1; i<=n; i++)
            scanf("%lf%lf%lf%lf",&line[i].p1.x,&line[i].p1.y,&line[i].p2.x,&line[i].p2.y);
        for(int i=1; i<=n; i++)
            for(int j=i+1; j<=n; j++)
            {
                if(cross(line[i],line[j]))
                    unit(i,j);
            }
        while(scanf("%d%d",&r,&t)==2)
        {
            if(r==0&&t==0) break;
            if(find(r)==find(t))
                printf("CONNECTED\n");
            else printf("NOT CONNECTED\n");
        }
    }
    return 0;
}

 更多详细信息请查看
java教程网 
http://www.itchm.com/forum-59-1.html
                
乐播投屏是一款简单好用、功能强大的专业投屏软件,支持手机投屏电视、手机投电脑、电脑投电视等多种投屏方式。 多端兼容与跨网投屏:支持手机、平板、电脑等多种设备之间的自由组合投屏,且无需连接 WiFi,通过跨屏技术打破网络限制,扫一扫即可投屏。 广泛的应用支持:支持 10000+APP 投屏,包括综合视频、网盘与浏览器、美韩剧、斗鱼、虎牙等直播平台,还能将央视、湖南卫视等各大卫视的直播内容一键投屏。 高清流畅投屏体验:腾讯独家智能音画调校技术,支持 4K 高清画质、240Hz 超高帧率,低延迟不卡顿,能为用户提供更高清、流畅的视觉享受。 会议办公功能强大:拥有全球唯一的 “超级投屏空间”,扫码即投,无需安装。支持多人共享投屏、远程协作批注,PPT、Excel、视频等文件都能流畅展示,还具备企业级安全加密,保障会议资料不泄露。 多人互动功能:支持多人投屏,邀请好友加入投屏互动,远程也可加入。同时具备一屏多显、语音互动功能,支持多人连麦,实时语音交流。 文件支持全面:支持 PPT、PDF、Word、Excel 等办公文件,以及视频、图片等多种类型文件的投屏,还支持网盘直投,无需下载和转格式。 特色功能丰富:投屏时可同步录制投屏画面,部分版本还支持通过触控屏或电视端外接鼠标反控电脑,以及在投屏过程中用画笔实时标注等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值