POJ 1696 Space Ant(点积的应用)
Space Ant
大意:有一只蚂蚁,每次都只向当前方向的左边走,问蚂蚁走遍所有的点的顺序输出。开始的点是纵坐标最小的那个点,开始的方向是开始点的x轴正方向。
思路:从开始点开始,每次找剩下的点中与当前方向所形成的夹角最小的点,为下一个要走的点(好像就是犄角排序,我不是很会),夹角就是用点积除以两个向量的距离,求一下acos值。
之前一直用叉积做,做了好久样例都没过,发现用错了。。。 题目挺好的,有助于理解点积与叉积
![](/assets/blank.gif)
![](/assets/blank.gif)
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(点积的应用)相关推荐
- POJ 1696 Space Ant(极角排序)【计算几何】
ACM博客_kuangbin POJ 1696 Space Ant(极角排序) Space Ant Time Limit: 1000MS Memory Limit: 10000K Total Su ...
- POJ - 1696 Space Ant(极角排序)
题目链接:点击查看 题目大意:现在有一只特殊的蚂蚁,它会按照以下规则尽可能长的寻找路径: 不能回头 不能右转 只能逆时针行走 现在给出n个点,输出最长的路径 题目分析:既然是逆时针旋转,那么每次只能走 ...
- POJ 1696 Space Ant 极角排序(叉积的应用)
题目大意:给出n个点的编号和坐标,按逆时针方向连接着n个点,按连接的先后顺序输出每个点的编号. 题目思路:Cross(a,b)表示a,b的叉积,若小于0:a在b的逆时针方向,若大于0a在b的顺时针方向 ...
- poj 1696 Space Ant
大致题意: 一只蚂蚁,只会向左转,现在给出平面上很多个点,求解一种走法, 能使得蚂蚁能经过的点最多,每个顶点该蚂蚁只能经过一次,且所行走的路线不能发生交叉. 卷包裹法: 形象思维假想一根无限长的绳子, ...
- 【POJ - 1696】Space Ant (凸包,最小极角,排序)
题干: The most exciting space discovery occurred at the end of the 20th century. In 1999, scientists t ...
- POJ1696 Space Ant
原题传送:http://poj.org/problem?id=1696 利用叉积判断所有点与线段位置关系.下一棵植物A'的位置与蚂蚁位置A的连线得到线段AA',如果所有没有吃掉的植物均在AA'的左端, ...
- POJ 2392 Space Elevator(多重背包变形)
Q: 额外添加了最大高度限制, 需要根据 alt 对数据进行预处理么? A: 是的, 需要根据 alt 对数组排序 Description The cows are going to space! T ...
- poj 2392 Space Elevator
题意 :给定n种积木,每种积木都有一个高度hi,一个数量ci,还有一个限制条件,这个积木所在的位置不能高于ai,问能叠起的最大高度// 这里有个问题需要注意 就是ai小的要先进行背包 不然 在 ai高 ...
- poj 1696(极角排序)
题目让找出一条最长的非右拐的路径. 这道题类似于凸包的Graham扫描法,依次对某点进行极角的排序. 参考博客:http://blog.csdn.net/zhengnanlee/article/det ...
- POJ 计算几何入门题目推荐
其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中.之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的算法,在很多领域有着重要的用途(例如本人的专 ...
最新文章
- 某大厂程序员吐槽:老家亲戚狮子大开口,竟跟自己借八十万给儿子买房!
- centos7安装vsftpd
- HSC86H SUMTOR 混合步进伺服电机驱动器
- 【捣鼓】移动硬盘装Ubuntu系统
- suse linux10 关闭防火墙,Suse10 关闭防火墙
- Angular框架里两个模块的互相依赖
- java xml dom getelementbyid,DOM中常见的元素获取方式
- 获取本机IP(考虑多块网卡、虚拟机等复杂情况)
- Python爬虫的基本原理
- win7计算机无法最大化,主编教您win7游戏无法全屏怎么办
- Numpy数据分析数值范围调整、计算
- 教程:Visual Studio 连接 MySQL 数据库(包含常见错误及解决方法)
- Swager登陆跳转了login登陆页面
- Java字节码插桩玩法(Javassist)
- 尚硅谷 模拟w3school首页导航条练习
- Mac将Wps本地文件备份到云端
- 禁止恶意域名访问服务器方法
- 路飞学城Python-Day37(practise)
- 用MATLAB求一阶微分方程(组)数值解
- 计算机程序扩展名是什么,LOG文件扩展名 - 什么是.log以及如何打开? - ReviverSoft...