(Relax ST1.12)POJ 2606 Rabbit hunt(给出若干个点,求最多能有多少个点共线)

题意:

给出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;
}




你可能感兴趣的:((Relax ST1.12)POJ 2606 Rabbit hunt(给出若干个点,求最多能有多少个点共线))