您的位置:首页 > 编程语言 > Go语言

poj 2007 Scrambled Polygon

2010-11-19 11:46 120 查看
有了poj 1113的积累,这题就是凸包的精简版,一看到题目,马上有思路,AC的感觉就是好

#include<iostream>
using namespace std;
#include<cmath>
#include<cstdlib>
#include<cstdio>
struct point
{
double x,y;
};
point input[60];
double multi(point p1,point p2,point p0)
{
return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
}
int cmp(const void *p1,const void *p2)
{
double m;
point p3,p4;
p3=*(point *)p1,p4=*(point *)p2;
m=multi(p3,p4,input[0]);
if(m<0)
return 1;
else
return -1;
}
int main()
{
int i=0,pos,j,k;
point Min,temp;
Min.y=1010;
while(scanf("%lf%lf",&input[i].x,&input[i].y)!=EOF)
{
if(input[i].y<Min.y||
input[i].y==Min.y&&input[i].x<Min.x)
{
Min=input[i],pos=i;
}
i++;
}
temp=input[0];
input[0]=input[pos];
input[pos]=temp;
qsort(input+1,i-1,sizeof(input[1]),cmp);
for(j=0;j<i;j++)
{
if(input[j].x==0)
break;
}
for(k=j;k<i;k++)
printf("(%.lf,%.lf)/n",input[k].x,input[k].y);
for(k=0;k<j;k++)
printf("(%.lf,%.lf)/n",input[k].x,input[k].y);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: