标签:
先按Y-X排序,在按对p0的极角排序,然后进行扫描
Point stk[maxn]; int top; bool cmpYX(const Point A,const Point B)//按Y-X排序 { if(A.y<B.y) return true; if(A.y==B.y){ return A.x<=B.x; } return false; } bool cmp(const Point A,const Point B)//按极角排序 { return (A-p[0])*(B-p[0])>EPS; } void graham_scan() { sort(p,p+N,cmpYX); sort(p+1,p+N,cmp); top=0;//用数组模拟栈 stk[top++]=p[0]; stk[top++]=p[1]; for(int i=2;i<N;i++){ if((stk[top-1]-stk[top-2])*(p[i]-stk[top-1])<-EPS){ top--; stk[top++]=p[i]; } else stk[top++]=p[i]; } }
标签:
原文地址:http://www.cnblogs.com/--560/p/4397012.html