POJ 2007 Scrambled Polygon(极角排序)

本文介绍了一个基于极角排序算法的应用实例,通过计算各点相对于原点的向量极角来进行排序,实现对输入点集的排序输出。使用C++语言进行实现,并提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:
POJ 2007 Scrambled Polygon

//向量a叉乘向量b小于0,说明向量b在向量a的右侧。
//极角排序
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <climits>
#include <cmath>
using namespace std;
const int MAX_N=100;

int n=0;

struct Point {
    int x,y;
}point[MAX_N],origin;

bool cmp(Point a,Point b)
{
    int x1=a.x-origin.x,y1=a.y-origin.y;
    int x2=b.x-origin.x,y2=b.y-origin.y;
    return x2*y1-x1*y2 < 0; //计算b和原点的向量p1与a和原点的向量p2的叉积是否小于0,小于0说明p1在p2的右侧
}

int main()
{
    freopen("Bin.txt","r",stdin);
    scanf("%d%d",&origin.x,&origin.y);
    while(~scanf("%d%d",&point[n].x,&point[n].y)) {
        n++;
    }
    sort(point,point+n,cmp);
    printf("(%d,%d)\n",origin.x,origin.y);
    for(int i=0;i<n;i++){
        printf("(%d,%d)\n",point[i].x,point[i].y);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值