题意 : 找出图上点能凑成三角型的最大面积,且这个三角形不能包含其他的点
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
double area(int x1,int y1,int x2,int y2,int x3,int y3)
{
return fabs(0.5*((y3-y1)*(x2-x1)-(y2-y1)*(x3-x1)));
}
int main()
{
int x[20],y[20],n,A,B,C,flag;
double s,sarea;
char point[20];
while (scanf("%d",&n) != EOF && n)
{
for (int i = 1 ; i <= n ; i++)
{
getchar();
scanf("%c %d %d",&point[i],&x[i],&y[i]);
}
sarea = 0 ;
for (int i= 1 ; i <= n - 2 ; i++)
for (int j = i +1 ; j <= n-1 ; j++)
for (int k = j+1 ; k <= n ; k++)
{
s = area(x[i],y[i],x[j],y[j],x[k],y[k]);
flag = 1;
for (int p = 1 ; p <= n ; p++)
{
if (!((p == i) || (p == j) || ( p == k)))
{
if ((s==area(x[i],y[i],x[j],y[j],x[p],y[p])+area(x[i],y[i],x[p],y[p],x[k],y[k])+area(x[p],y[p],x[j],y[j],x[k],y[k])))
{
flag = 0 ;
break;
}
}
}
if (flag && (s > sarea))
{
sarea = s;
A = i ;
B = j ;
C = k ;
}
}
printf("%c%c%c\n",point[A],point[B],point[C]);
}
return 0;
}