单调链凸包
2015-06-02 11:12
323 查看
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
相关文章推荐
- 在pentaho4.8中插件Saiku保存为中文文件名
- 教你快速高效接入SDK——总体思路和架构
- linux内核数据结构之链表
- 使 div 元素看上去像一个按钮
- 陈怡暖:黄金隔夜为何惊天暴动,希腊问题随时可能再引爆市场
- 《人月神话》各章精选
- E: 无法获得锁 /var/lib/dpkg/lock - open
- WindowManager 中LayoutParams的各种属性~2
- 计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接
- 损失函数
- GRE Issue 范文 Topic 5
- center 安装lamp 环境
- mysql五:mysql实战日志教程
- 55. C# -- 不安全代码(Unsafe)
- iOS开发中常用设计模式
- iOS 上传ipa后预发行 二进制无效
- 18.计算单词数
- C# Enum,Int,String的互相转换
- IE的BHO通过IHTMLDocument2接口获得网页源代码
- php获取指定范围内最接近数的方法