hdu 2108 Shape of HDU(判断多边形是否为凸多边形)

这道题解法很多,

解法一:过多边形任意一边做一条直线,如果其他各顶点都在这条直线的同侧,则把这个多边形叫做凸多边形

求出所有边所在的直线,然后判断所有的顶点是否在直线同一侧即可

解法二:用叉积来判断顺逆关系,这个方法参考大神的,感觉这个方法简单多了

#include<stdio.h>
int x[100],y[100];
bool judge(int a,int b,int c)
{
	int x1=x[a]-x[c],x2=x[b]-x[c];
	int y1=y[a]-y[c],y2=y[b]-y[c];
	return x1*y2-x2*y1>=0;
}
int main()
{
	int i,j,k,n;
	while(scanf("%d",&n)!=-1&&n)
	{
		for(i=0;i<n;i++)
		  scanf("%d%d",&x[i],&y[i]);
        for(i=0;i<n;i++)
        {
        	int a=i-1,b=i-2;
        	if(a<0)a+=n;
        	if(b<0)b+=n;
        	if(!judge(b,a,i))
        	   break;
        }
        if(i==n)
          printf("convex\n");
        else
          printf("concave\n");
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值