HDU 1392 Surround the Trees
2013-07-29 12:30
295 查看
题目大意:
求散点集凸包外围总长度,结果保留两位小数
代码:
注意比较函数中精度的处理
求散点集凸包外围总长度,结果保留两位小数
代码:
#include<stdio.h> #include<stdlib.h> #include<math.h> #define MAX 102 #define eps 1e-6 typedef struct point { int x,y; }point; point p[MAX],stack[MAX]; bool isZero(double x) { return (x>0 ? x : -x)<eps; } double dis(point a,point b) { return sqrt(1.0*(a.x-b.x)*(a.x-b.x)+1.0*(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) { double k; point *c=(point *)a,*d=(point *)b; 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 x=p[0].x, y=p[0].y, mi=0; int i,top; double len; point tmp; 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; } //找出最左下的一个点 tmp=p[mi]; p[mi]=p[0]; p[0]=tmp; qsort(p+1,n-1,sizeof(point),cmp); //从p中第二个元素开始快排 p =p[0]; stack[0]=p[0]; stack[1]=p[1]; stack[2]=p[2]; top=2; for(i=3;i<=n;i++) { while(crossProd(stack[top-1],stack[top],p[i])<=eps && top>=2) top--; //加入一个点后,向右偏拐或共线,则上一个点不在凸包内,则--top,该过程直到不向右偏拐或没有三点共线的点 stack[++top]=p[i]; //在当前情况下符合凸包的点,入栈 } len=0; for(i=0;i<top;i++) len+=dis(stack[i],stack[i+1]); return len; } int main() { int T,i; double len; while(scanf("%d",&T)!=EOF && T) { for(i=0;i<T;i++) scanf("%d%d",&p[i].x,&p[i].y); if(T==1) printf("0.00\n"); else if(T==2) printf("%.2lf\n",dis(p[0],p[1])); else { len=Graham(T); printf("%.2lf\n",len); } } return 0; }
注意比较函数中精度的处理
相关文章推荐
- hdu 1392 Surround the Trees(凸包)
- HDU 1392 Surround the Trees(凸包*计算几何)
- hdu 1392 Surround the Trees(求取凸包并求凸包的周长)
- hdu 1392 Surround the Trees
- Surround the Trees HDU 1392 凸包
- 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(纯裸的凸包)
- 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 凸包裸题