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

来源:互联网 发布:知乎dota2与lol 编辑:程序博客网 时间:2024/06/14 23:29

这道题解法很多,

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

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

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

#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;}

原创粉丝点击