#include<stdio.h>
#include<algorithm>
#include<string.h>
#define N 105
using 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);
sort(p,p+n,cmp);
int tot=ConvexHull(p,n,tubao);
}
凸包模板
最新推荐文章于 2022-07-04 22:04:47 发布