凸包模板

来源:互联网 发布:pps网络电视播放器apk 编辑:程序博客网 时间:2024/06/07 11:00
#include<stdio.h>#include<algorithm>#include<string.h>#define N 105using namespace std;struct point{int x,y,id;point(){}point(int x,int y){this->x=x;this->y=y;}}p[N],tubao[N];point operator-(point A,point B)  {      return point(A.x-B.x,A.y-B.y);  }  bool cmp(point a,point b){if(a.x==b.x)return a.y<b.y;return a.x<b.x;}int Cross(point A,point B)  {      return A.x*B.y-A.y*B.x;  }  int ConvexHull(point* p,int n,point* ch)//求凸包  {      int m=0;      for(int i=0;i<n;i++)      {          while(m>1&&Cross(ch[m-1]-ch[m-2],p[i]-ch[m-2])<=0)m--;          ch[m++]=p[i];      }      int k=m;      for(int i=n-2;i>=0;i--)      {          while(m>k&&Cross(ch[m-1]-ch[m-2],p[i]-ch[m-2])<=0)m--;          ch[m++]=p[i];      }      if(n>1)m--;      return m;  }  int main(){int n;scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d%d",&p[i].x,&p[i].y);int tot=ConvexHull(p,n,tubao);}

原创粉丝点击