单调链凸包
来源:互联网 发布:linux ln s 编辑:程序博客网 时间:2024/05/22 01:45
1 Monotone Chain Convex Hull(单调链凸包)算法伪代码: 2 //输入:一个在平面上的点集P 3 //点集 P 按 先x后y 的递增排序 4 //m 表示共a[i=0...m]个点,ans为要求的点; 5 struct P 6 { 7 int x,y; 8 friend int operator < (P a, P b) 9 {10 if((a.x<b.x) || (a.x==b.x && a.y<b.y))11 return 1;12 return 0;13 }14 }a[m+10],ans[m+10];15 //判断第三点在这个直线的左侧还是右侧16 //当judge(), 的返回值小于等于0,说明在右侧,我们一直要找在直线右侧的点17 double judge(P a, P b,P c) 18 {19 return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);20 }21 //构建下凸包,从左跑到右,由下面通过22 int k1=0;23 for(int i=0; i<m; i++)//下凸包24 {25 while(k1>1 && judge(ans[k1-2],ans[k1-1],a[i])<=0)26 {27 k1--;28 }29 ans[k1++]=a[i];30 }31 // 构建上凸包,从右到左,由上面通过32 int k2=k1;33 for(int i=m-1; i>=0; i--)//上凸包34 {35 while(k1>k2 && judge(ans[k1-2],ans[k1-1],a[i])<=0)36 {37 k1--;38 }39 ans[k1++]=a[i];40 }41 k1--;//减去起点,因为起点进去了两次;
转:http://www.faceye.net/search/118355.html
0 0
- 单调链凸包
- 单调栈 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调栈
- 单调队列
- 单调队列
- 单调队列
- 黑马程序员——网络编程
- WindowManager 中LayoutParams的各种属性~2
- BAT解密:互联网技术发展之路(5)- 开发层技术剖析
- SAT阅读考试的典型问题及应对策略
- 教你快速高效接入SDK——总体思路和架构
- 单调链凸包
- 损失函数
- linux内核数据结构之kfifo
- android 桌面应用图标修改无效的问题
- android:网页使用网址访问activity
- 大数据,TB、PB、EB,你了解多少?
- 获取 checkbox 和 radio 选定的值,以及设默认值
- linux内核数据结构之链表
- ORA-01219:数据库未打开:仅允许在固定表/视图中查询