LightOJ1285->极角排序
来源:互联网 发布:app数据查询 编辑:程序博客网 时间:2024/05/18 01:46
LightOJ1285->极角排序
题意:
给出平面上的N个点,每个点按照给出顺序编号,问能否只用一条线连接所有的点构成一个多边形,如果可以,则以最左下角的点为起点,逆时针输出多边形边上这些点的编号,否则输出impossible。
题解:
其实只要点的个数大于等于3并且这些点不都在同一条直线上,就能被连出一个多边形。
因此需要进行极角排序。由于极角排序时是角度相同时横纵坐标从小到大,所以需要从最后一个点开始判断一次这个点之上是否有相邻且和最后一个点与list[0]点构成向量平行的点。
代码:
#include <stdio.h>#include <string.h>#include <algorithm>#include <cmath>#include <iostream>using namespace std;struct Point{ int x,y; int index ; Point(int _x = 0, int _y = 0) { x = _x; y = _y; } Point operator -(const Point &b)const { return Point(x - b.x, y - b.y); } int operator ^(const Point &b)const { return x*b.y - y*b.x; } int operator *(const Point &b)const { return x*b.x + y*b.y; } bool operator < (Point b)const { return x == b.x ? y < b.y:x < b.x; }};int dist(Point a ,Point b){ return ((b - a) * (b - a)) ;}const int MAXN = 2010;Point list[MAXN];bool _cmp(Point p1,Point p2){ int tmp = (p1-list[0])^(p2-list[0]); if(tmp > 0)return true; else if(tmp == 0 && dist(p1,list[0]) <= dist(p2,list[0])) return true; else return false;}void anglesort(int n) //输入,并把最左下方的点放在list[0],并且进行极角排序{ int i,k; for(int i = 0 ; i <n ; i ++) { scanf("%d%d" , &list[i].x,&list[i].y) ; list[i].index = i ; } sort(list , list + n) ; sort(list+1 , list+n , _cmp) ; int tmp = 0; for(int i = n-2 ; i >0 ; i --) { if(((list[n-1]-list[0])^(list[i]-list[0]))!=0) { tmp = i ; break ; } } if(tmp == 0) printf("Impossible\n") ; else { reverse(list+tmp+1,list+n) ; for(int i = 0 ; i < n ; i ++) { if(i == n-1) printf("%d\n",list[i].index) ; else printf("%d " ,list[i].index) ; } }}int main(){ int n , T; scanf("%d" , &T) ; for(int cas = 1 ; cas <= T ; cas ++) { scanf("%d" , &n) ; printf("Case %d:\n",cas) ; anglesort(n) ; } return 0;}
0 0
- LightOJ1285->极角排序
- LightOj1285
- 计算几何的排序--极角排序
- 极角排序
- 极角排序
- 极角排序
- 极角排序
- poj2007极角排序
- 极角排序
- 极角排序
- 极角排序
- 极角排序
- 极角排序 POJ1696
- 极角排序
- hdu5738(极角排序)
- 极角排序
- 极角排序
- 极角排序
- Phpstorm配置git版本控制器
- Java后台学习之---cookie和session学习
- linux定时任务crontab自动备份mysql数据库(ssh/php)
- Struts2.0学习---第一个程序
- android开发实用工具
- LightOJ1285->极角排序
- 洛谷 P1024 [NOIP2001 T1] 一元三次方程求解
- 3.4 HotSpot算法实现
- (Leetcode)215.Kth Largest Element in an Array(medium)
- IntelliJ IDEA 使用教程
- POJ 3667
- Android中的Adapter 详解(三)
- 二维数组中的查找
- ADF(js)--如何控制按钮类组件不往后台发送请求