【算法题】寻找三角形

来源:互联网 发布:国家网络安全法 解读 编辑:程序博客网 时间:2024/05/29 17:21

三维空间中有N个点,每个点可能是三种颜色的其中之一,三种颜色分别是红绿蓝,分别用’R’, ‘G’, ‘B’表示。
现在要找出三个点,并组成一个三角形,使得这个三角形的面积最大。
但是三角形必须满足:三个点的颜色要么全部相同,要么全部不同。

输入描述:
首先输入一个正整数N三维坐标系内的点的个数.(N <= 50)
接下来N行,每一行输入 c x y z,c为’R’, ‘G’, ‘B’ 的其中一个。x,y,z是该点的坐标。(坐标均是0到999之间的整数)

输出描述:
输出一个数表示最大的三角形面积,保留5位小数。

输入例子:
5
R 0 0 0
R 0 4 0
R 0 0 3
G 92 14 7
G 12 16 8

输出例子:
6.00000


  • 输出保留5位有效数字: http://blog.csdn.net/edricbjtu/article/details/41082597

  • point和distance函数与std命名空间冲突


#include <iostream>#include <vector>#include <iomanip>using namespace std;//#define debug_struct mypoint{    char C;    int x;    int y;    int z;};double mydistance(mypoint a, mypoint b){    double tmp;    tmp = 0;    tmp += (a.x - b.x)*(a.x - b.x);    tmp += (a.y - b.y)*(a.y - b.y);    tmp += (a.z - b.z)*(a.z - b.z);    tmp = sqrt(tmp);    return tmp;}double space(mypoint a, mypoint b, mypoint c){    double h1 = mydistance(a, b);    double h2 = mydistance(b, c);    double h3 = mydistance(a, c);    double p = (h1 + h2 + h3)/2;    double s = p*(p - h1)*(p - h2)*(p - h3);    s = sqrt(s);    return s;}double func(vector<mypoint>& vec){    double maxs = 0;    for (auto i = 0; i < vec.size(); ++i)    {        for (auto j = i + 1; j < vec.size(); ++j)        {            for (auto k = j + 1; k < vec.size(); ++k)            {                if (vec[i].C == vec[j].C && vec[i].C != vec[k].C)                {                    continue;                }                if (vec[i].C == vec[k].C && vec[i].C != vec[j].C)                {                    continue;                }                if (vec[j].C == vec[k].C && vec[j].C != vec[i].C)                {                    continue;                }                double s = space(vec[i], vec[j], vec[k]);                if (s > maxs)                {                    maxs = s;                }            }        }    }    return maxs;}int main(){    int n;    vector<mypoint> vec;#ifdef debug_    n = 472;#else    cin >> n;    vec.resize(n);    for (auto i = 0;i<n;++i)    {        cin >> vec[i].C;        cin >> vec[i].x;        cin >> vec[i].y;        cin >> vec[i].z;    }#endif     cout.setf(ios::fixed);    cout << fixed << setprecision(5) << func(vec) << endl;    return 0;}

原创粉丝点击