题目地址:http://poj.org/problem?id=2007
这是一道基础题,就是将点按照相对于(0,0)的极坐标位置排一下序,按逆时针方向。我们用叉积排序,而不用atan函数,因为atan函数在精度要求严格时会失效
可以看做是凸包的先行题。
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include<vector>
#include <algorithm>
using namespace std;
struct coordinate
{
int x,y;
}a[10000];
bool cmp(struct coordinate c1,struct coordinate c2)
{
if((c1.x*c2.y-c2.x*c1.y)>0)//如果/c2在c1的逆时针方向
return true;
return false;
}
int main()
{
int i=0;
while(scanf("%d%d",&a[i].x,&a[i].y)!=EOF)
i++;
sort(a+1,a+i,cmp);
for(int j=0;j<i;j++)
{
printf("(%d,%d)\n",a[j].x,a[j].y);
}
return 0;
}