HDU 1392 Surround the Trees
2013-06-24 14:10
337 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1392
典型的凸包问题
典型的凸包问题
#include <stdio.h> #include <stdlib.h> #include <math.h> #define _DEBUG 1 #define MAX_TREE 110 typedef struct { double x,y; }Point; Point pts[MAX_TREE]; Point chs[MAX_TREE]; inline void exchange(Point &pa,Point &pb){ Point tmp = pa; pa = pb; pb = tmp; } double dist(Point pa,Point pb){ return sqrt((pa.x-pb.x)*(pa.x-pb.x)+(pa.y-pb.y)*(pa.y-pb.y)); } double crossMultiple(Point p0,Point p1,Point p2){ return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y); } int compare(const void *p1,const void *p2){ Point p3 = *(Point *)p1; Point p4 = *(Point *)p2; double cm = crossMultiple(pts[0],p3,p4); if(cm < 0) return 1; else if(cm == 0 && dist(pts[0],p3) > dist(pts[0],p4)) return 1; else return -1; } double convexHull(int n){ int i; int tmp=0; double sum = 0; for(i=1;i<n;++i){//寻找第0个点 if(pts[i].y < pts[tmp].y) tmp = i; else if(fabs(pts[i].y-pts[tmp].y)<0.000001){//不严格 if(pts[i].x < pts[tmp].x) tmp=i; } } exchange(pts[tmp],pts[0]); qsort(pts+1,n-1,sizeof(Point),compare);//排序,注意不包含第0个 chs[0] = pts[0]; chs[1] = pts[1]; int top = 1; for(i=2;i<n;++i){ while(top>=1 && crossMultiple(chs[top-1],chs[top],pts[i]) <= 0) top--; chs[++top] = pts[i]; } chs[++top] = chs[0]; for(i=0;i<top;i++){ sum += dist(chs[i],chs[i+1]); } return sum; } int main(){ int n; int i; #if _DEBUG==1 freopen("hdu1392.in","r",stdin); #endif while(scanf("%d",&n) && n!=0){ for(i=0;i<n;++i){ scanf("%lf %lf",&pts[i].x,&pts[i].y); } if(n==1){ printf("%.2f\n",0.00); continue; } if(n==2){//注意两个点的情况:n=2的时候,输出那2个点的EuclidDis printf("%.2lf\n",dist(pts[0],pts[1])); continue; } double sum = convexHull(n); printf("%.2lf\n",sum); } return 0; }
相关文章推荐
- hdu 1392 Surround the Trees 凸包裸题
- hdu 1392 fzu 1333 Surround the Trees 简单凸包
- hdu 1392 Surround the Trees 凸包模板
- Surround the Trees HDU - 1392 凸包周长(Andrew)
- hdu 1392 Surround the Trees(凸包模板题)
- hdu 1392 Surround the Trees 凸包模板题
- HDU1392 Surround the Trees
- HDU 1392 Surround the Trees
- HDU-1392 Surround the Trees,凸包入门!
- hdu 1392 Surround the Trees( 凸包问题)
- HDU-#1392 Surround the Trees(Graham & Andrew +凸包)
- hdu 1392【Surround the Trees】
- HDU-1392 Surround the Trees(凸包板子题)
- hdu1392 Surround the Trees 凸包
- hdu 1392:Surround the Trees(计算几何,求凸包周长)
- HDU 1392 Surround the Trees(计算几何,求凸包周长)
- hdu 1392 Surround the Trees【凸包】
- hdu1392-Surround the Trees
- HDU 1392 Surround the Trees(求凸包周长)
- HDU 1392 Surround the Trees(凸包)