首页 > 代码库 > Monotone Chain Convex Hull(单调链凸包)
Monotone Chain Convex Hull(单调链凸包)
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--;//减去起点,因为起点进去了两次;
凸包题目:nyoj 78
Monotone Chain Convex Hull(单调链凸包)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。