#include<iostream>
#include<cstring>
#include<cstdio>
struct Node
{
int a,b;
}p[1005];
int main()
{
int i,j,k,n;
int cnt,ans;
while(~scanf("%d",&n) && n)
{
for(i=0;i<n;i++)
scanf("%d%d",&p[i].a,&p[i].b);
ans=0;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
cnt=2;
for(k=j+1;k<n;k++)
if( (p[k].b-p[i].b)*(p[j].a-p[i].a)== (p[j].b-p[i].b)*(p[k].a-p[i].a) ) // 避开斜率问题
cnt++;
if(cnt>ans) ans=cnt;
}
printf("%d\n",ans);
}
return 0;
}
给n(n<700)个点,求最多有多少个点处于 一条直线?
O(n^3), 主要是 比较斜率的问题,可以 用 交叉相乘再相等的 方法 避开斜率问题!!
具体 代码: