Space Ant

大意:有一只蚂蚁,每次都只向当前方向的左边走,问蚂蚁走遍所有的点的顺序输出。开始的点是纵坐标最小的那个点,开始的方向是开始点的x轴正方向。

思路:从开始点开始,每次找剩下的点中与当前方向所形成的夹角最小的点,为下一个要走的点(好像就是犄角排序,我不是很会),夹角就是用点积除以两个向量的距离,求一下acos值。

之前一直用叉积做,做了好久样例都没过,发现用错了。。。 题目挺好的,有助于理解点积与叉积

 1 struct Point{
 2     double x, y;
 3     int id;
 4 } P[55], Min;
 5
 6 double dmult(Point p1, Point p2, Point p)
 7 {
 8     return (p1.x-p.x)*(p2.x-p.x)+(p1.y-p.y)*(p2.y-p.y);
 9 }
10
11 double Distance(Point a, Point b)
12 {
13     return sqrt((b.x-a.x)*(b.x-a.x)+(b.y-a.y)*(b.y-a.y));
14 }
15
16 int T;
17 int n;
18 bool vis[55];
19
20 void Solve()
21 {
22     scanf("%d", &T);
23     while(T--)
24     {
25         memset(vis, true, sizeof(vis));
26         scanf("%d", &n);
27         Min = (Point){INF, INF, INF};
28         for(int i = 1; i <= n; ++i)
29         {
30             scanf("%d%lf%lf", &P[i].id, &P[i].x, &P[i].y);
31             if(P[i].y < Min.y)
32             {
33                 Min = P[i];
34             }
35         }
36
37         vis[Min.id] = false;
38         Point Q = (Point){0, Min.y};
39         Point H = Min;
40
41         printf("%d %d ", n, Min.id);
42         for(int i = 2; i <= n; ++i)
43         {
44             double Min_a = INF;
45             for(int j = 1; j <= n; ++j)
46             {
47                 if(vis[P[j].id] == false) continue;
48                 Point t;
49                 t.x = P[j].x-(H.x-Q.x);
50                 t.y = P[j].y-(H.y-Q.y);
51                 double x = dmult(t, H, Q);
52                 double a = acos(x/Distance(Q, H)/Distance(Q, t));
53                 if(a < Min_a)
54                 {
55                     Min_a = a;
56                     Min = P[j];
57                 }
58             }
59             vis[Min.id] = false;
60             Q = H;
61             H = Min;
62             printf("%d", Min.id);
63             printf("%s", i==n?"\n":" ");
64         }
65     }
66 }

POJ 1696

转载于:https://www.cnblogs.com/Silence-AC/p/3804415.html

POJ 1696 Space Ant(点积的应用)相关推荐

  1. POJ 1696 Space Ant(极角排序)【计算几何】

    ACM博客_kuangbin POJ 1696 Space Ant(极角排序) Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Su ...

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

    题目链接:点击查看 题目大意:现在有一只特殊的蚂蚁,它会按照以下规则尽可能长的寻找路径: 不能回头 不能右转 只能逆时针行走 现在给出n个点,输出最长的路径 题目分析:既然是逆时针旋转,那么每次只能走 ...

  3. POJ 1696 Space Ant 极角排序(叉积的应用)

    题目大意:给出n个点的编号和坐标,按逆时针方向连接着n个点,按连接的先后顺序输出每个点的编号. 题目思路:Cross(a,b)表示a,b的叉积,若小于0:a在b的逆时针方向,若大于0a在b的顺时针方向 ...

  4. poj 1696 Space Ant

    大致题意: 一只蚂蚁,只会向左转,现在给出平面上很多个点,求解一种走法, 能使得蚂蚁能经过的点最多,每个顶点该蚂蚁只能经过一次,且所行走的路线不能发生交叉. 卷包裹法: 形象思维假想一根无限长的绳子, ...

  5. 【POJ - 1696】Space Ant (凸包,最小极角,排序)

    题干: The most exciting space discovery occurred at the end of the 20th century. In 1999, scientists t ...

  6. POJ1696 Space Ant

    原题传送:http://poj.org/problem?id=1696 利用叉积判断所有点与线段位置关系.下一棵植物A'的位置与蚂蚁位置A的连线得到线段AA',如果所有没有吃掉的植物均在AA'的左端, ...

  7. POJ 2392 Space Elevator(多重背包变形)

    Q: 额外添加了最大高度限制, 需要根据 alt 对数据进行预处理么? A: 是的, 需要根据 alt 对数组排序 Description The cows are going to space! T ...

  8. poj 2392 Space Elevator

    题意 :给定n种积木,每种积木都有一个高度hi,一个数量ci,还有一个限制条件,这个积木所在的位置不能高于ai,问能叠起的最大高度// 这里有个问题需要注意 就是ai小的要先进行背包 不然 在 ai高 ...

  9. poj 1696(极角排序)

    题目让找出一条最长的非右拐的路径. 这道题类似于凸包的Graham扫描法,依次对某点进行极角的排序. 参考博客:http://blog.csdn.net/zhengnanlee/article/det ...

  10. POJ 计算几何入门题目推荐

      其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中.之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的算法,在很多领域有着重要的用途(例如本人的专 ...

最新文章

  1. 某大厂程序员吐槽:老家亲戚狮子大开口,竟跟自己借八十万给儿子买房!
  2. centos7安装vsftpd
  3. HSC86H SUMTOR 混合步进伺服电机驱动器
  4. 【捣鼓】移动硬盘装Ubuntu系统
  5. suse linux10 关闭防火墙,Suse10 关闭防火墙
  6. Angular框架里两个模块的互相依赖
  7. java xml dom getelementbyid,DOM中常见的元素获取方式
  8. 获取本机IP(考虑多块网卡、虚拟机等复杂情况)
  9. Python爬虫的基本原理
  10. win7计算机无法最大化,主编教您win7游戏无法全屏怎么办
  11. Numpy数据分析数值范围调整、计算
  12. 教程:Visual Studio 连接 MySQL 数据库(包含常见错误及解决方法)
  13. Swager登陆跳转了login登陆页面
  14. Java字节码插桩玩法(Javassist)
  15. 尚硅谷 模拟w3school首页导航条练习
  16. Mac将Wps本地文件备份到云端
  17. 禁止恶意域名访问服务器方法
  18. 路飞学城Python-Day37(practise)
  19. 用MATLAB求一阶微分方程(组)数值解
  20. 计算机程序扩展名是什么,LOG文件扩展名 - 什么是.log以及如何打开? - ReviverSoft...

热门文章

  1. Hazel for Mac(自动化清理)
  2. 如何使用终端来调节Mac鼠标移动速度?
  3. 如何使用Vectorworks Vision 2020将场景另存为图像
  4. 测试 JavaScript 函数的性能
  5. 成也DP,败也DP(AFO?)
  6. 《Linux多线程服务端编程:使用muduo C++网络库》上市半年重印两次,总印数达到了9000册...
  7. tengine快速安装
  8. openfire无法启动
  9. Composer最近升级后导致无法下载包的问题解决办法
  10. 分布式文件系统HDFS体系