极角排序

每次选择一个最外围的没选过的点,选择的时候需要利用极角排序进行选择

#include<cstdio>
#include<cstring>
#include<vector>
#include<cmath>
#include<queue>
#include<list>
#include<algorithm>
using namespace std; const double eps=1e-;
struct point
{
int x,y;
double alpha;
int len2;
int id;
} p[];
int T,n;
vector<point>v;
vector<int>ans;
bool flag[]; bool cmp(const point &a, const point &b)
{
if(fabs(a.alpha-b.alpha)<eps) return a.len2<b.len2;
return a.alpha<b.alpha;
} int len2(point a,point b)
{
return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
} double f(point a,point b,point c) //返回点a所对应的角的弧度
{
double B2=(double)len2(a,c);
double C2=(double)len2(a,b);
double A2=(double)len2(b,c);
double COSA=(B2+C2-A2)/(*sqrt(B2)*sqrt(C2));
return 3.1415926-acos(COSA);
} int main()
{
scanf("%d",&T);
int Miny=;
while(T--)
{
scanf("%d",&n);
for(int i=; i<=n; i++)
{
scanf("%d%d%d",&p[i].id,&p[i].x,&p[i].y);
Miny=min(Miny,p[i].y);
} memset(flag,,sizeof flag);
ans.clear(); point pre;pre.x=-;pre.y=Miny;
point now;now.x=;now.y=Miny; for(int i=; i<=n; i++)
{
v.clear();
for(int k=; k<=n; k++)
{
if(!flag[p[k].id])
{
p[k].alpha=f(now,p[k],pre);
p[k].len2=len2(p[k],now);
v.push_back(p[k]);
}
}
sort(v.begin(),v.end(),cmp);
flag[v[].id]=;
ans.push_back(v[].id);
pre.x=now.x;
pre.y=now.y;
now.x=v[].x;
now.y=v[].y;
}
printf("%d ",ans.size());
for(int i=; i<ans.size(); i++)
{
printf("%d",ans[i]);
if(i<ans.size()-) printf(" ");
else printf("\n");
}
}
return ;
}

POJ 1696 Space Ant的更多相关文章

  1. poj 1696 Space Ant (极角排序)

    链接:http://poj.org/problem?id=1696 Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissi ...

  2. POJ 1696 Space Ant(极角排序)

    Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2489   Accepted: 1567 Descrip ...

  3. poj 1696 Space Ant(模拟+叉积)

    Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3840   Accepted: 2397 Descrip ...

  4. POJ 1696 Space Ant 卷包裹法

    Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3316   Accepted: 2118 Descrip ...

  5. POJ 1696 Space Ant(点积的应用)

    Space Ant 大意:有一仅仅蚂蚁,每次都仅仅向当前方向的左边走,问蚂蚁走遍全部的点的顺序输出.開始的点是纵坐标最小的那个点,開始的方向是開始点的x轴正方向. 思路:从開始点開始,每次找剩下的点中 ...

  6. 2018.07.04 POJ 1696 Space Ant(凸包卷包裹)

    Space Ant Time Limit: 1000MS Memory Limit: 10000K Description The most exciting space discovery occu ...

  7. poj 1696:Space Ant(计算几何,凸包变种,极角排序)

    Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2876   Accepted: 1839 Descrip ...

  8. POJ 1696 - Space Ant 凸包的变形

    Technorati Tags: POJ,计算几何,凸包 初学计算几何,引入polygon后的第一个挑战--凸包 此题可用凸包算法做,只要把压入凸包的点从原集合中排除即可,最终形成图形为螺旋线. 关于 ...

  9. POJ 1696 Space Ant(凸包变形)

    Description The most exciting space discovery occurred at the end of the 20th century. In 1999, scie ...

  10. POJ 1696 Space Ant --枚举,模拟,贪心,几何

    题意: 有很多点,从最右下角的点开始走起,初始方向水平向右,然后以后每步只能向左边走,问最多能走多少个点. 解法: 贪心的搞的话,肯定每次选左边的与它夹角最小的点,然后走过去. 然后就是相当于模拟地去 ...

随机推荐

  1. inno setup 1

      1.简单脚本 [setup] AppName=Test AppVerName=Test DefaultDirName="d:\setup\app" AppVersion=1.0 ...

  2. 使用btoa和atob来进行Base64转码和解码

      btoa: 将普通字符串转为Base64字符串 atob: 将Base64字符串转为普通字符串   说明:window.btoa不支持汉字:   ===>使用window.encodeURI ...

  3. OpenGL.Vertex Array Object (VAO).

    OpenGL抛弃glEnable(),glColor(),glVertex(),glEnable()这一套流程的函数和管线以后,就需要一种新的方法来传递数据到Graphics Card来渲染几何体,我 ...

  4. Temporary exceptions can be configured via your app's Info.plist file.

    报错: App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure ...

  5. JS里的CSS函数

    <title>无标题文档</title> <script> function css(obj,name,value){ if(arguments.length==2 ...

  6. cc2530 -----SampleApp.c解析

    /************************************************************************************************** ...

  7. java Future模式

    Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Futu ...

  8. arrayList里的快速失败

    快速失败是指某个线程在迭代集合类的时候,不允许其他线程修改该集合类的内容,这样迭代器迭代出来的结果就会不准确. 比如用iterator迭代collection的时候,iterator就是另外起的一个线 ...

  9. L6,Percy Buttons

    expressions: knock at敲打 knock off 碰掉,I knock the vase off the table 下班,He always knocks off six o'cl ...

  10. 剑指offer之有序二维数组查找

    大多数人注意到元素是行列有序的,会马上想到对每行(或列)进行二分查找,每行(或列)需要logN时间,N行(或列)共需要NlogN时间,很容易写出如下代码 1 2 3 4 5 6 7 8 9 10 11 ...