hdu1392——Surround the Trees
2010-09-17 19:07
309 查看
这道题用qsort爽了一把,对qsort有了初步的认识!
#include<stdio.h> #include<stdlib.h> #include<math.h> #define max 3300 struct node { double x,y; }g[max],stack[max],min; int n; void swap(int a,int b) { min=g[a];g[a]=g[b];g[b]=min; } double ans(node yuan,node zhong,node last) { return (yuan.x-zhong.x)*(last.y-zhong.y)-(last.x-zhong.x)*(yuan.y-zhong.y); } double dis(node a,node b) { return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y); } int cmp(const void *a,const void *b)//逆时针排序 返回正数要交换 { node *a1=(node*)a; node *b1=(node*)b; if((ans(g[0],*a1,*b1)>0)||(ans(g[0],*a1,*b1)==0&&dis(g[0],*a1)<=dis(g[0],*b1))) return 1; else return -1; } void Graham() { int i,k; min=g[0];k=0; for(i=1;i<n;i++) if(g[i].y<min.y||(g[i].y==min.y&&g[i].x<min.x)) { min=g[i]; k=i; } swap(0,k); qsort(g+1,n-1,sizeof(g[0]),cmp); stack[0]=g[0]; stack[1]=g[1]; stack[2]=g[2]; int top=2; g =g[0]; for(i=3;i<=n;i++) { while(ans(stack[top-1],stack[top],g[i])>0) top--; stack[++top]=g[i]; } double sum=0.0; for(i=0;i<top;i++) sum+=sqrt(dis(stack[i],stack[i+1])); printf("%.2lf/n",sum); } main() { int i; while(scanf("%d",&n)!=EOF) { if(n==0) break; for(i=0;i<n;i++)//n=1||n=2需要考虑下,以后凸包问题,要注意下这个 scanf("%lf%lf",&g[i].x,&g[i].y); if(n==1) printf("0.00/n"); else if(n==2) printf("%.2lf/n",sqrt(dis(g[0],g[1]))); else Graham(); } }
相关文章推荐
- HDU1392 Surround the Trees
- HDU 1392 Surround the Trees
- hdu 1392 Surround the Trees 凸包裸题
- hdu 1392 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,凸包入门!
- hdu 1392 Surround the Trees( 凸包问题)
- HDU-#1392 Surround the Trees(Graham & Andrew +凸包)
- hdu 1392:Surround the Trees(计算几何,求凸包周长)
- HDU 1392 Surround the Trees(计算几何,求凸包周长)
- hdu 1392 Surround the Trees【凸包】
- HDU-1392 Surround the Trees(凸包板子题)
- hdu1392 Surround the Trees 凸包
- hdu1392-Surround the Trees
- HDU 1392 Surround the Trees(求凸包周长)
- hdu 1392 Surround the Trees
- HDU1392 Surround the Trees(凸包)