hdu 1392 Surround the Trees
2014-03-18 21:08
169 查看
凸包模板
#include<cstdio> #include<cstring> #include<iostream> #include<string> #include<map> #include<algorithm> #include<cmath> using namespace std; const int N=105; const double eps=1e-8; struct point{ double x; double y; }p , stack ; bool isZero(double x){ return (x>0 ? x : -x) <eps; } double dis(point A,point B){ return sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y)); } double crossProd(point A,point B,point C){ return (B.x-A.x)*(C.y-A.y)-(B.y-A.y)*(C.x-A.x); } int cmp(const void *a, const void *b) { point *c = (point *)a; point *d = (point *)b; double k = crossProd(p[0], *c, *d);//极角大小转化为求叉乘 if (k<eps || isZero(k) && dis(p[0], *c)>dis(p[0], *d)) return 1; return -1; } double Graham(int n) { int i,x=p[0].x,y=p[0].y; int mi=0; for( i=1;i<n;i++){ if(p[i].x<x||(p[i].x==x&&p[i].y<y)){ x=p[i].x; y=p[i].y; mi=i; } } point tmp=p[mi]; p[mi]=p[0]; p[0]=tmp; qsort(p+1, n-1, sizeof(point), cmp); p =p[0]; stack[0]=p[0];stack[1]=p[1];stack[2]=p[2]; int top=2; for(i=3;i<=n;i++){ while(crossProd(stack[top-1],stack[top],p[i])<eps &&top>=2) --top; stack[++top]=p[i]; } double len=0; for(int i=0;i<top;i++) len+=dis(stack[i],stack[i+1]); return len; } int main() { int n; while(scanf("%d",&n),n){ int i; for(i=0;i<n;i++){ scanf("%lf %lf",&p[i].x,&p[i].y); } if(n==1) printf("0.00\n"); else if(n==2) printf("%.2lf\n",dis(p[0],p[1])); else printf("%.2lf\n",Graham(n)); } }
相关文章推荐
- 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(求凸包周长)
- 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 凸包裸题
- HDU 1392 Surround the Trees 构造凸包
- hdu 1392 fzu 1333 Surround the Trees 简单凸包
- Surround the Trees HDU - 1392 凸包周长(Andrew)
- hdu 1392 Surround the Trees(凸包模板题)
- HDU-1392 Surround the Trees,凸包入门!
- hdu 1392 Surround the Trees( 凸包问题)
- HDU-#1392 Surround the Trees(Graham & Andrew +凸包)