poj 2007 Scrambled Polygon--按极角排序

来源:互联网 发布:linux tomcat启动命令 编辑:程序博客网 时间:2024/06/05 02:51
/*给一个凸包,但是点序混乱,让你从(0,0)开始逆时针找到这个凸包就是按极角从小到大排序  是求凸包算法的一部分*/#include<stdio.h>#include<stdlib.h>struct point {int x,y;}dian[55];int n;int cross(point p,point s,point e){return (e.x-s.x)*(p.y-s.y)-(p.x-s.x)*(e.y-s.y);}int dis(point a,point b){return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);}int cmp2(const void *a,const void *b){int ret;point *c=(point*)a,*d=(point*)b;ret=cross(*d,dian[0],*c);if(ret!=0) return -ret;else if(dis(*c,dian[0])>dis(*d,dian[0]))return 1;else return 0;}int main(){int i;n=0;while(scanf("%d%d",&dian[n].x,&dian[n].y)!=EOF) ++n;qsort(dian+1,n-1,sizeof(dian[1]),cmp2);//就是这儿 按极角从小到大排序for(i=0;i<n;i++)printf("(%d,%d)\n",dian[i].x,dian[i].y);return 0;}

原创粉丝点击