在m个点中取n个点, 计算这n个点的距离和, 并找出距离和最大的那组.
struct node
{
int x;
int y;
};
int m = 5;
int n = 3;
int iCnt = 0;
int mul(int a, int b)
{
int i = 0;
int ret1 = 1;
int ret2 = 1;
int ret = 1;
for(i = 1; i <= b; i++)
ret1 *= (a-i+1);
for(i = 1; i<= b; i++)
ret2 *=i;
ret = ret1/ret2;
return ret;
}
node *m_node = new node[m];
int dis(node a, node b, node c)
{
float flength = 0;
float pow1 = 0;
float pow2 = 0;
float pow3 = 0;
pow1 = pow((float)(a.y - b.y),2) + pow((float)(a.x - b.x),2);
pow2 = pow((float)(a.y - c.y),2) + pow((float)(a.x - c.x),2);
pow3 = pow((float)(c.y - b.y),2) + pow((float)(c.x - b.x),2);
flength = sqrt(pow1) + sqrt(pow2) + sqrt(pow3);
return (int)flength;
}
int calc()
{
int i = 0;
int j = 0;
node Node[3];// 存最大和
int iMax_dis = 0;// 最大和是多少
int iTmp = 1;
int iret = 0;
for(i = 0; i <= m - n; i++)
{
for(j = 1; j <= mul(m-i, n-1); j++)
{
if(i+j+1 <= m)
{
while (i+j+iTmp-m+1 <=0)
{
iret = dis(m_node[i], m_node[i+j], m_node[i+j+iTmp]);
if(iret > iMax_dis)
{
iMax_dis = iret;
Node[0] = m_node[i];
Node[1] = m_node[i+j];
Node[2] = m_node[i+j+iTmp];
}
iTmp++;
}
iTmp = 1;
}
}
}
return 0;
}
void findArr()
{
m_node[0].x = 1;
m_node[0].y = 1;
m_node[1].x = 3;
m_node[1].y = 1;
m_node[2].x = 2;
m_node[2].y = 4;
m_node[3].x = 1;
m_node[3].y = 6;
m_node[4].x = 4;
m_node[4].y = 6;
int i = 0;
int mul_m = 1;
int mul_n = 1;
iCnt = mul(m, n);// 总组合数
calc();
}