您的位置:首页 > 其它

POJ 1696 Space Ant (极角排序的应用)

2011-06-01 17:10 393 查看
#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
struct
Point{int x, y, num;}st;
bool
cmp_y(const Point &p1,const Point &p2){
return
p1.y<p2.y;
}

int
x_mult(Point op, Point sp, Point ep){
return
(sp.x-op.x)*(ep.y-op.y)-(sp.y-op.y)*(ep.x-op.x);
}

int
dist(Point p1, Point p2){
return
(p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y);
}

bool
cmp_angle(const Point &p1, const Point &p2){
int
t=x_mult(st, p1, p2);
if
(t>0)return true;
if
(t<0)return false;
if
(dist(p1,st)<dist(p2,st))
return
true;
return
false;
}


int
main(){
int
T, i, n;
Point p[55];
scanf("%d", &T);
while
(T--){
scanf("%d", &n);
for
(i=0; i<n; i++)
scanf("%d %d %d", &p[i].num, &p[i].x, &p[i].y);
sort(p,p+n,cmp_y);
st=p[0];
printf("%d %d", n, p[0].num);
for
(i=1; i<n; i++){
sort(p+i, p+n, cmp_angle);
st=p[i];
printf(" %d", p[i].num);
}

printf("/n");
}

return
0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: