poj2007(极角排序)

Posted frankchen831x

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj2007(极角排序)相关的知识,希望对你有一定的参考价值。

题目链接:https://vjudge.net/problem/POJ-2007

题意:乱序给出凸包的所有顶点,按极角序输出顶点。

思路:按极角排序一次即可。

AC code:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;

const int maxn=105;
const double PI=acos(-1.0);

struct Point{
    int x,y;
    Point():x(0),y(0){}
    Point(int x,int y):x(x),y(y){}
}list[maxn];
int stack[maxn],top;

//计算叉积p0p1×p0p2
int cross(Point p0,Point p1,Point p2){
    return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
}
//计算p1p2的距离
double dis(Point p1,Point p2){
    return sqrt((double)(p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y));
}
//极角排序函数,角度相同则距离小的在前面
bool cmp(Point p1,Point p2){
    int tmp=cross(list[0],p1,p2);
    if(tmp>0) return true;
    else if(tmp==0&&dis(list[0],p1)<dis(list[0],p2)) return true;
    else return false;
}

int main(){
    int x,y,n=0;
    while(~scanf("%d%d",&x,&y)){
        list[n].x=x,list[n].y=y;
        ++n;
    }
    sort(list+1,list+n,cmp);
    for(int i=0;i<n;++i)
        printf("(%d,%d)
",list[i].x,list[i].y);
    return 0;
}

 

以上是关于poj2007(极角排序)的主要内容,如果未能解决你的问题,请参考以下文章

[POJ2007]Scrambled Polygon(计算几何 极角排序)

POJ 2007 Scrambled Polygon(简单极角排序)

POJ 2007 Scrambled Polygon(极角排序)

POJ 2007 Scrambled Polygon 极角序 水

●POJ 2007 Scrambled Polygon

poj1696(极角排序,贪心)