寻找三角形(待调试)

#include<bits/stdc++.h>
using namespace std;
int r[1000][3];
int g[1000][3];
int b[1000][3];
int main()
    {
    int n;
    while(cin>>n)
        {
        int rn=0,gn=0,bn=0;
        char c;
        int x,y,z;
        for(int i=0;i<n;i++)
            {
            cin>>c>>x>>y>>z;
            if(c=='R'){
                r[rn][0]=x;
                r[rn][1]=y;
                r[rn][2]=z;
                rn++;
            }
            else if(c=='G'){
                g[gn][0]=x;
                g[gn][1]=y;
                g[gn][2]=z;
                gn++;
            }
            else if(c=='B'){
                b[bn][0]=x;
                b[bn][1]=y;
                b[bn][2]=z;
                bn++;
            }
        }
        double max=0;
        if(rn>=3)
            {
            for(int i1=0;i1<rn-2;i1++)
                for(int i2=i1+1;i2<rn-1;i2++)
                    for(int i3=i2+1;i3<rn;i3++)
                        {
                        double d1=sqrt((r[i1][0]-r[i2][0])*(r[i1][0]-r[i2][0])+(r[i1][1]-r[i2][1])*(r[i1][1]-r[i2][1])+(r[i1][2]-r[i2][2])*(r[i1][2]-r[i2][2]));
                        double d2=sqrt((r[i1][0]-r[i3][0])*(r[i1][0]-r[i3][0])+(r[i1][1]-r[i3][1])*(r[i1][1]-r[i3][1])+(r[i1][2]-r[i3][2])*(r[i1][2]-r[i3][2]));
                        double d3=sqrt((r[i3][0]-r[i2][0])*(r[i3][0]-r[i2][0])+(r[i3][1]-r[i2][1])*(r[i3][1]-r[i2][1])+(r[i3][2]-r[i2][2])*(r[i3][2]-r[i2][2]));
                        double l=(d1+d2+d3)/2;
                        double s=sqrt(l*(l-d1)*(l-d2)*l-d3);
                        if(s>max)max=s; 
                    }
        }
        if(gn>=3)
            {
            for(int i1=0;i1<gn-2;i1++)
                for(int i2=i1+1;i2<gn-1;i2++)
                    for(int i3=i2+1;i3<gn;i3++)
                        {
                        double d1=sqrt((g[i1][0]-g[i2][0])*(g[i1][0]-g[i2][0])+(g[i1][1]-g[i2][1])*(g[i1][1]-g[i2][1])+(g[i1][2]-g[i2][2])*(g[i1][2]-g[i2][2]));
                        double d2=sqrt((g[i1][0]-g[i3][0])*(g[i1][0]-g[i3][0])+(g[i1][1]-g[i3][1])*(g[i1][1]-g[i3][1])+(g[i1][2]-g[i3][2])*(g[i1][2]-g[i3][2]));
                        double d3=sqrt((g[i3][0]-g[i2][0])*(g[i3][0]-g[i2][0])+(g[i3][1]-g[i2][1])*(g[i3][1]-g[i2][1])+(g[i3][2]-g[i2][2])*(g[i3][2]-g[i2][2]));
                        double l=(d1+d2+d3)/2;
                        double s=sqrt(l*(l-d1)*(l-d2)*l-d3);
                        if(s>max)max=s; 
                    }
        }
        if(bn>=3)
            {
            for(int i1=0;i1<bn-2;i1++)
                for(int i2=i1+1;i2<bn-1;i2++)
                    for(int i3=i2+1;i3<bn;i3++)
                        {
                        double d1=sqrt((b[i1][0]-b[i2][0])*(b[i1][0]-b[i2][0])+(b[i1][1]-b[i2][1])*(b[i1][1]-b[i2][1])+(b[i1][2]-b[i2][2])*(b[i1][2]-b[i2][2]));
                        double d2=sqrt((b[i1][0]-b[i3][0])*(b[i1][0]-b[i3][0])+(b[i1][1]-b[i3][1])*(b[i1][1]-b[i3][1])+(b[i1][2]-b[i3][2])*(b[i1][2]-b[i3][2]));
                        double d3=sqrt((b[i3][0]-b[i2][0])*(b[i3][0]-b[i2][0])+(b[i3][1]-b[i2][1])*(b[i3][1]-b[i2][1])+(b[i3][2]-b[i2][2])*(b[i3][2]-b[i2][2]));
                        double l=(d1+d2+d3)/2;
                        double s=sqrt(l*(l-d1)*(l-d2)*l-d3);
                        if(s>max)max=s; 
                    }
        }
             for(int i1=0;i1<rn;i1++)
                for(int i2=0;i2<gn;i2++)
                    for(int i3=0;i3<bn;i3++)
                        {
                        double d1=sqrt((r[i1][0]-g[i2][0])*(r[i1][0]-g[i2][0])+(r[i1][1]-g[i2][1])*(r[i1][1]-g[i2][1])+(r[i1][2]-g[i2][2])*(r[i1][2]-g[i2][2]));
                        double d2=sqrt((r[i1][0]-b[i3][0])*(r[i1][0]-b[i3][0])+(r[i1][1]-b[i3][1])*(r[i1][1]-b[i3][1])+(r[i1][2]-b[i3][2])*(r[i1][2]-b[i3][2]));
                        double d3=sqrt((b[i3][0]-g[i2][0])*(b[i3][0]-g[i2][0])+(b[i3][1]-g[i2][1])*(b[i3][1]-g[i2][1])+(b[i3][2]-g[i2][2])*(b[i3][2]-g[i2][2]));
                        double l=(d1+d2+d3)/2;
                        double s=sqrt(l*(l-d1)*(l-d2)*l-d3);
                        if(s>max)max=s; 
                    }
        cout<<max<<endl;
            
    }
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值