博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POj 1696 Space Ant (极角排序)
阅读量:5320 次
发布时间:2019-06-14

本文共 1095 字,大约阅读时间需要 3 分钟。

题意:一只蚂蚁,只会向左转,现在给出平面上很多个点,求解一种走法,能使得蚂蚁能经过的点最多,每个顶点该蚂蚁只能经过一次,且所行走的路线不能发生交叉.

对于题目所输入的点,先找出最左下方的顶点(即纵坐标最小的顶点),然后对剩下的顶点按照对与左下点的极角排序,然后反复找最左下的点,反复进行极角排序,同时记录排序后左下的顶点.

极角排序方法:利用叉积,看向量p1和p2的叉积是否小于零,是则说明p1在p2逆时针方向,即p1的极角比p2的大,极角相同则按离p0距离降序排序.

#include 
#include
#include
#include
#include
using namespace std;const int MAX=55;struct point{ int id; int x; int y;}p[MAX],cur;int pnum[MAX];double dis(point a ,point b){ return sqrt(double((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)));}int mnt(point p0 ,point p1 ,point p2){ return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);}bool judgement(point a ,point b){ if(mnt(cur,a,b)>0) return true; else if(mnt(cur,a,b)<0) return false; else if(dis(cur,a)
>t; while(t--){ cin>>n; for(int i=0 ;i
>p[i].id>>p[i].x>>p[i].y; } sort(p,p+n,cmp); memset(pnum,0,sizeof(pnum)); int cnt=0; cur=p[0]; pnum[cnt++]=p[0].id; for(int i=1 ;i

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/wanglaoda/p/4937169.html

你可能感兴趣的文章
循环群
查看>>
python 函数的应用、闭包、迭代器
查看>>
mysql数据库学习记录1
查看>>
nodejs-mysql模块
查看>>
HDU--2546 饭卡
查看>>
2019杭电多校一 K. Function (数论)
查看>>
[IOT] - 在树莓派的 Raspbian 系统中安装 .Net Core 3.0 运行环境
查看>>
Proxifier安装与使用
查看>>
[译]Google官方关于Android架构中MVP模式的示例
查看>>
Python学习路线
查看>>
C# 3.0语言新特性(语言规范):7 查询表达式from XX in ss where xx.s=e select xx
查看>>
lov的建立
查看>>
demo 基于html css 实现小米官网部分内容搭建
查看>>
【BJOI2006】狼抓兔子
查看>>
二叉搜索树的第k个结点
查看>>
bzoj2815 ZJOI2012 灾难
查看>>
制作web安装程序
查看>>
1-3*交换变量
查看>>
一个.NET通用JSON解析/构建类的实现(c#)
查看>>
Windows Phone开发(31):画刷 转:http://blog.csdn.net/tcjiaan/article/details/7460226
查看>>