参考:http://blog.csdn.net/frankiller/article/details/7730627
关键在想到一个简单好用的
“判断点是否在三角形内部”
#include <iostream>
#include <sstream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <set>
#include <cctype>
#include <algorithm>
#include <cmath>
#include <deque>
#include <map>
#include <iomanip>
using namespace std;
///
#define INF 0xffffff7
#define maxn 2000
///
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[16],y[16],n,i,j,k,A,B,C,p,flag;
double s,sarea;
char point[16]; //点的坐标号码
while (scanf("%d",&n),n)
{
for (i=1;i<=n;i++)
{
getchar();
scanf("%c %d %d",&point[i],&x[i],&y[i]);
}
sarea=0;
for (i = 1; i <= n - 2; i++)
for (j = i + 1; j <= n - 1; j++)
for (k = j + 1; k <= n; k++)
{
s = area(x[i],y[i],x[j],y[j],x[k],y[k]);
flag = 1;
for (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;
}