题意:
给出n个点的整数坐标(n<=700),求一条直线,使得在这条直线上的点数最多,输出点数。
思路:
简单几何题。采用几何中三个点是否在一条直线判定定理。
/*
* POJ_2606.cpp
*
* Created on: 2013年11月26日
* Author: Administrator
*/
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 205;
struct Point{
int x;
int y;
}p[maxn];
int main(){
int n;
while(scanf("%d",&n)!=EOF){
int i;
for(i = 0 ; i < n ; ++i){
scanf("%d%d",&p[i].x,&p[i].y);
}
int j,k;
int temp;
int Max = -100;
for(i = 0 ; i < n ; ++i){
for(j = i+1 ; j < n ; ++j){
temp = 0;
for(k = j+1 ; k < n ; ++k){
int a = (p[i].x - p[k].x)*(p[j].y - p[k].y);
int b = (p[i].y - p[k].y)*(p[j].x - p[k].x);
if(a == b){//如果三个点共线,则他们的斜率相同...
temp++;
}
}
Max = (Max > temp)?Max:temp;
}
}
printf("%d\n",Max+2);
}
return 0;
}
本文介绍了一种解决几何问题的方法,即寻找通过最多给定点的一条直线。使用了三点共线的判定原理,通过遍历所有可能的点对来找出共线点的最大数量。
976

被折叠的 条评论
为什么被折叠?



