关于多点共线问题
Posted doulcl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于多点共线问题相关的知识,希望对你有一定的参考价值。
想了想这个问题,自己写了写,之前百度了个答案,思想基本类似
#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");
}
以上是关于关于多点共线问题的主要内容,如果未能解决你的问题,请参考以下文章