设为首页 加入收藏

TOP

poj 2079 Triangle,旋转卡壳求点集的最大三角形
2015-07-20 17:52:17 来源: 作者: 【 】 浏览:1
Tags:poj 2079 Triangle 旋转 卡壳求 最大 三角形

给出一个点集,求顶点在点集中的最大的三角形面积。


我们知道这三角形的三个点肯定在凸包上,我们求出凸包之后不能枚举,因为题目n比较大,枚举的话要O(n^3)的数量级,所以采用旋转卡壳的做法:
首先枚举三角形的第一个顶点i, 初始化第二个顶点j=i+1和第三个顶点k=j+1,对k进行循环,直到找到第一个k使得cross(i,j,k)>cross(i,j,k+1),如果k==i进入下一次循环。
对j,k进行旋转,每次循环之前更新最大值,然后固定一个j,同样找到一个k使得cross(i,j,k)>cross(i,j,k+1)。对j进行++操作,继续进行下一次,知道j==k'(对j,k旋转之前的(k+1)%n)或k==i为止。


double rotating_calipers(vector
  
   & points){
    vector
   
     p = ConvexHull(points); int n = p.size(); p.push_back(p[0]); double ans = 0; for(int i=0; i
    
      0) k = (k+1) % n; if(k==i) continue; int kk = (k+1) % n; while(j!=kk && k!=i) { ans = max(ans, Cross(p[j]-p[i], p[k]-p[i])); while(k!=i && Cross(p[j]-p[i], p[k+1]-p[k]) > 0) k = (k+1) % n; j = (j+1) % n; } } return ans*0.5; }
    
   
  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇poj 2187 Beauty Contest , 旋转.. 下一篇LA 4728 Square ,旋转卡壳法求多..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: