关于多点共线问题

想了想这个问题,自己写了写,之前百度了个答案,思想基本类似

#include <vector>
#include <map>

class point
 {
 public:
     point(int x0,int x1):x(x0),y(x1){};
     ~point(){};
     int getX() const {return x;}
     int getY() const {return y;}
 private:
     int x;
     int y;
 };
 int getMaxOnline(vector<point>& input)
 {
     map<int,int> map1;
     static int key = 0;
     int max = 0;
     for(int i =0;i<input.size();++i)
     {
         for(int k =0;k<input.size();++k)
         {
             if(i != k)
             {
                 key ++;
                 int x0 = input[i].getX() - input[k].getX();
                 int y0 = input[i].getY() - input[k].getY();
                  for(int j =0;j<input.size();++j)
                  {
                     if(j != k && j != i )
                     {
                         int x1 =  input[j].getX() - input[k].getX();
                         int y1 =  input[j].getY() - input[k].getY();
                         if(x0*y1 - y0*x1 == 0)
                         {
                             map1[key]++;
                         }
                     }
                  }
             }
         }
     }
     map<int,int>::iterator it;
     for(it = map1.begin();it != map1.end();++it)
     {
         if(it->second >= max)
         {
             max = it->second;
         }
     }
     return max+2;
 }

void main()

{
    int x,y;
    vector<point> vec;
    for(int i = 0;i < 5 ;++i)
    {
        cin >>x>>y;
        point a(x,y);
        vec.push_back(a);
    }
    int max = getMaxOnline(vec);
    cout<<"max online is "<<max <<endl;
    system("pause");
 }

原文地址:https://www.cnblogs.com/doulcl/p/10561324.html

时间: 2024-08-09 09:41:17

关于多点共线问题的相关文章

poj2780Linearity(多点共线)

链接 判断最多多少点在一条直线上, 可以枚举每一个点为坐标系的原点,其它点变成相应的位置,然后求得过原点及其点的斜率,排序找一下最多相同的. 1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<stdlib.h> 6 #include<vector> 7 #include<cmath> 8

UVA 270-Lining Up(多点共线)

Lining Up Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Description  Lining Up  ``How am I ever going to solve this problem?" said the pilot. Indeed, the pilot was not facing an easy task. She had to drop pa

HDOJ 4463 Outlets 最小生成树

Prim....似乎没有考虑多点共线也能A..... Outlets Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2565    Accepted Submission(s): 1182 Problem Description In China, foreign brand commodities are often much mo

poj1584 A Round Peg in a Ground Hole 判断多边形凹凸,点到线的距离【基础计算几何】

大致思路:首先对于所给的洞的点,判断是否是凸多边形,图形的输入和输出可以是顺时针或者逆时针,而且允许多点共线 Debug 了好几个小时,发现如下问题 判断三点是否共线,可用斜率公式判断 POINT point_A, point_B, point_C; if(point_A.x == point_B.x || point_B.x == point_C.x){ if(point_A.x == point_B.x && point_B.x == point_C.x) continue; }els

atcoder #082 E 暴力 计算几何

给出点集,然后求一个凸包的所有的子凸包的贡献总和,贡献计算是凸包内部含边界上点的数量N,凸包的不包含边界的顶点数S,贡献为$2^{N-S}$ 首先很容易想到,凸包上包含内部的所有点构成的子凸包有Sum(i = 3 ->N)C(i,N)种情况,这个式子其实就是二项式的一部分.但是有可能出现多点共线的不合法情况,所以问题转换为求所有点构成的直线中,每条直线上大于2点的点的数目,每条直线都要分别计算,最后减去就行了.求共线可以用叉积可以用斜率,注意判重. 这场比赛迟了10分钟才写,这题开始还在用凸包搞

2016.7.15.2014noip模拟赛D1(和昨天那个不一样,但同样网上搜不到

1.      合理种植 (plant.pas/.c/.cpp) [问题描述] 大COS在氯铯石料场干了半年,受尽了劳苦,终于决定辞职.他来到表弟小cos的寒树中学,找到方克顺校长,希望寻个活干. 于是他如愿以偿接到了一个任务…… 美丽寒树中学种有许多寒树.方克顺希望校园无论从什么角度看都是满眼寒树,因此他不希望有三棵甚至更多寒树种在一条直线上.现在他把校园里n棵寒树的坐标都给了大COS,让他数出存在多少多树共线情况.(若一条直线上有三棵或以上的树,则算出现一个多树共线情况.) [输入] 输入文

hdu1337郭大侠与阴阳家

地址:http://acm.uestc.edu.cn/#/problem/show/1337 思路: 郭大侠与阴阳家 Time Limit: 3000/4000MS (Java/Others)     Memory Limit: 262144/262144KB (Java/Others) Submit Status “污秽”是自异世界“祸野”现身,危害人世的怪物.而“阴阳师”长年以来则与污秽战斗至今. 国中生少年·郭大侠曾以成为能祓除所有污秽的最强阴阳师为目标,但自从遭遇了“雏月之悲剧”后,他便

Programming Assignment 3 : Pattern Recognition

这周的这个问题是在给定一系列的点中寻找多点共线的模式. 计算机视觉重要的两个部分:特征检测(Feature Dectection)和模式识别(Pattern Recognition).特征检测提取出图片的重要特征,模式识别发掘出这些特征中的模式.这里探究的点共线的问题在现实生活中也有很多应用,比如统计数据分析. Problem. 从二维平面上的N个互不相同的点中,绘制出每个(最多)连接的4个或4个以上点集合的线段. Point data type. 给定的Point类型的API public c

自动几何推理的研究(二) 线

现在研究线. 线对象被大量使用, 为此需要仔细分析. 线对象大致分两类: 线段(L_Segment), 直线(L_Line). 线段(L_Segment) 主要用于线段相等记录(Cong_Seg), 线段等比(Ratio_Seg)记录中, 也用于线段相等集合(CSegs). 线段对象本身不作为搜索数据. 直线(L_Line) 主要用于平行线(P_Line), 垂线(T_Line), 角(AngleS) 记录中. 实现中直线以路径(G_Path)为基类, 这样与圆(Circle)共用一个实现基类,