给定一个平面内的点的集合,求共线最多点的个数。要求减少重复运算,并给出测试案例。
来源:互联网 发布:淘宝怎么添加宝贝规格 编辑:程序博客网 时间:2024/06/02 08:01
- 思路:对于集合中的任意两点,循环遍历剩下的点,判断是否与其共线,记录下共线点的个数,找出其中一个最大的共线点的个数
#define _CRT_SECURE_NO_WARNINGS#include <iostream> #include <string> #include <algorithm> #include <vector> #include <ctime> using namespace std;struct Point {int x;int y;Point() : x(0), y(0) {}Point(int a, int b) : x(a), y(b) {}};class pointSolution {public:bool isCollineation(Point& p1, Point& p2, Point& p3)//判断三点是否共线{int x1 = p2.x - p1.x;int y1 = p2.y - p1.y;int x2 = p3.x - p1.x;int y2 = p3.y - p1.y;if (x1 * y2 == x2 * y1) //共线的定义return true;return false;}int maxPoints(vector<Point> &points){if (points.size() <= 2){return points.size();}int maxLine = 2;bool flag = false;//检测是否所有点都重合 for (size_t i = 0; i < points.size(); ++i){int repNum = 0;//记录重复点的个数 for (size_t j = i + 1; j < points.size(); ++j){if (points[i].x == points[j].x && points[i].y == points[j].y){repNum++;continue;}flag = true;int count = 2 + repNum;for (size_t k = j + 1; k < points.size(); ++k)if (isCollineation(points[i], points[j], points[k]))count++;if (count > maxLine)maxLine = count;}}if (!flag){maxLine = points.size();}return maxLine;}};int main(){srand((unsigned int) time(NULL));int x = 0, y = 0;vector<Point> points;for(int i = 0; i < 50; i++){points.push_back(Point(rand() % 100, rand() % 100));}pointSolution ps;cout <<"共线最多点的个数是:"<< ps.maxPoints(points) << endl;return 0;}
0 0
- 给定一个平面内的点的集合,求共线最多点的个数。要求减少重复运算,并给出测试案例。
- 最多共线点的数目
- 点集中共线点的最大个数
- poj 1118 最多共线的点
- Max Points on a line ,在二维平面寻找共线的最多点
- 寻找平面内共线点数最多的直线和点数
- POJ 1118 求平面上最多x点共线
- 求二维平面上共线最多的点数
- uva 11529 求一个平面内有多少个凸边形 或者求所有三角形包含点的总个数
- [算法] 已知在平面坐标系内有N个点,求离开给定坐标距离最近的10个点
- pku1737给定点求连通图的个数
- 给定一个平面内三个不同的点p1、p2和p3,求出任意两点(即点p1和点p2、点p1和点p3、点p2和点p3)之间的距离。
- lightoj1292Laser Shot【共线判断求共线的最多点数】
- HDU5738(平面上的点,统计共线的点的子集)
- java:共线上的点
- (Relax ST1.12)POJ 2606 Rabbit hunt(给出若干个点,求最多能有多少个点共线)
- 直线上最多的点的个数
- hdu 5020 求3点共线的组合数
- corosync+pacemaker使用pcs构建高可用集群
- vue渲染从后台获取的json数据
- Openstack-I版计算节点:Nova/Neutron/Ceilometer服务不断重启
- C语言中实现函数返回字符串
- 几种Python执行时间的计算方法
- 给定一个平面内的点的集合,求共线最多点的个数。要求减少重复运算,并给出测试案例。
- 会话管理
- HeadFirst设计模式第一章总结
- LLVM Create a PointerValue from c-side-ptr
- Swift unowned和weak的区别
- 《Cocoa设计模式》读书笔记(1)
- Mysql用户忘记密码以及密码过期问题
- 内存泄漏和内存溢出
- Not so Mobile 天平 UVA839