Graham求凸包
2016-07-23 15:50
267 查看
ACM模版
Graham
/* * Graham 求凸包 O(N * logN) * CALL: nr = graham(pnt, int n, res); res[]为凸包点集; */ struct point { double x, y; }; bool mult(point sp, point ep, point op) { return (sp.x - op.x) * (ep.y - op.y) >= (ep.x - op.x) * (sp.y - op.y); } //inline bool operator < (const point &l, const point &r) //{ // return l.y < r.y || (l.y == r.y && l.x < r.x); //} int graham(point pnt[], int n, point res[]) { int i, len, top = 1; sort(pnt, pnt + n); if (n == 0) { return 0; } res[0] = pnt[0]; if (n == 1) { return 1; } res[1] = pnt[1]; if (n == 2) { return 2; } res[2] = pnt[2]; for (i = 2; i < n; i++) { while (top && mult(pnt[i], res[top], res[top - 1])) { top--; } res[++top] = pnt[i]; } len = top; res[++top] = pnt[n - 2]; for (i = n - 3; i >= 0; i--) { while (top != len && mult(pnt[i], res[top], res[top - 1])) { top--; } res[++top] = pnt[i]; } return top; // 返回凸包中点的个数 }
相关文章推荐
- Paul Graham文集
- HDU 2022 最大三角形(点集合中最大三角形)
- Graham算法—二维点集VC++实现
- HDU1392 Surround the Trees(凸包模版题)
- 凸包算法
- wireshark捕获/过滤指定ip地址数据包
- 非空子集个数
- POJ 1611 The Suspects
- 【bzoj3611】 大工程
- Netty解决半包(TCP粘包/拆包导致)读写问题
- 【转】C# Winform打包部署时添加注册表信息实现开机启动
- codeforces #364c They Are Everywhere 尺取法
- hdu 5738 多校2 Eureka 【几何计数】
- 001-字符串最后一个单词的长度
- C++ Primer 笔记(2)第二章 变量与基本类型
- java动态代理汇总
- 如何把某个元素移除你的视线
- python——类
- Assets文件下文件读取方式
- 织梦dedecms生成栏目HTML缓慢的一个可能原因及解决方法