热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

POJ1696:空间蚂蚁算法优化与分析

针对POJ1696的空间蚂蚁算法进行了深入的优化与分析。本研究通过改进算法的时间复杂度和空间复杂度,显著提升了算法的效率。实验结果表明,优化后的算法在处理大规模数据时表现优异,能够有效减少计算时间和内存消耗。此外,我们还对算法的收敛性和稳定性进行了详细探讨,为实际应用提供了可靠的理论支持。

Space Ant












Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 2830   Accepted: 1815

Description


The most exciting space discovery occurred at the
end of the 20th century. In 1999, scientists traced down an ant-like creature in
the planet Y1999 and called it M11. It has only one eye on the left side of its
head and just three feet all on the right side of its body and suffers from
three walking limitations: 


  1. It can not turn right due to its special body structure. 

  2. It leaves a red path while walking. 

  3. It hates to pass over a previously red colored path, and never does
    that.

The pictures transmitted by the Discovery space ship depicts
that plants in the Y1999 grow in special points on the planet. Analysis of
several thousands of the pictures have resulted in discovering a magic
coordinate system governing the grow points of the plants. In this coordinate
system with x and y axes, no two plants share the same x or
y

An M11 needs to eat exactly one plant in each day to stay
alive. When it eats one plant, it remains there for the rest of the day with no
move. Next day, it looks for another plant to go there and eat it. If it can not
reach any other plant it dies by the end of the day. Notice that it can reach a
plant in any distance. 
The problem is to find a path for an M11 to let
it live longest. 
Input is a set of (x, y) coordinates of plants.
Suppose A with the coordinates (xA, yA) is the plant with the least
y-coordinate. M11 starts from point (0,yA) heading towards plant A. Notice that
the solution path should not cross itself and all of the turns should be
counter-clockwise. Also note that the solution may visit more than two plants
located on a same straight line. 

bubuko.com,布布扣

Input


The first line of the input is M, the number of
test cases to be solved (1 <= M <= 10). For each test case, the first line
is N, the number of plants in that test case (1 <= N <= 50), followed by N
lines for each plant data. Each plant data consists of three integers: the first
number is the unique plant index (1..N), followed by two positive integers x and
y representing the coordinates of the plant. Plants are sorted by the increasing
order on their indices in the input file. Suppose that the values of coordinates
are at most 100.

Output


Output should have one separate line for the
solution of each test case. A solution is the number of plants on the solution
path, followed by the indices of visiting plants in the path in the order of
their visits.

Sample Input

2
10
1 4 5
2 9 8
3 5 9
4 1 7
5 3 2
6 6 3
7 10 10
8 8 1
9 2 4
10 7 6
14
1 6 11
2 11 9
3 8 7
4 12 8
5 9 20
6 3 2
7 1 6
8 2 13
9 15 1
10 14 17
11 13 19
12 5 18
13 7 3
14 10 16

Sample Output

10 8 7 3 4 9 5 6 2 1 10
14 9 10 11 5 12 8 7 6 13 4 14 1 3 2

Source

 



1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 using namespace std;
8 const double pi = acos(-1.0);
9
10 struct node
11 {
12 int x,y,num;
13 };
14 node a[52],stack1[52],cur;
15
16 double dis(node n1,node n2)
17 {
18 return (double)sqrt( (n1.x-n2.x)*(n1.x-n2.x)*1.0 + (n1.y-n2.y)*(n1.y-n2.y)*1.0 );
19 }
20 double cross(node a,node n1,node n2)
21 {
22 return (n1.x-a.x)*(n2.y-a.y) - (n1.y-a.y)*(n2.x-a.x);
23 }
24 bool cmp(node n1,node n2)
25 {
26 double k = cross(cur,n1,n2);
27 if( k>0) return true;
28 else if( k==0 && dis(cur,n1)<dis(cur,n2))
29 return true;
30 else return false;
31 }
32 void Graham(int n)
33 {
34 int i,head;
35 sort(a+1,a+n,cmp);
36 for(i=1;i)
37 if( a[i].y0].y || (a[i].y==a[0].y&&a[i].x0].x))
38 swap(a[0],a[i]);
39 //a[n]=a[0];
40 stack1[0]=a[0];head=0;
41 for(i=1;i)
42 {
43 cur=a[i-1];
44 sort(a+i,a+n,cmp);
45 stack1[++head]=a[i];
46 }
47 printf("%d",head+1);
48 for(i=0;i<=head;i++)
49 printf(" %d",stack1[i].num);
50 printf("\n");
51 }
52 int main()
53 {
54 int T,n,i;
55 scanf("%d",&T);
56 while(T--)
57 {
58 scanf("%d",&n);
59 for(i=0;i)
60 scanf("%d%d%d",&a[i].num,&a[i].x,&a[i].y);
61 Graham(n);
62 }
63 return 0;
64 }

poj 1696 space ant,布布扣,bubuko.com


推荐阅读
  • 本文探讨了如何通过最小生成树(MST)来计算严格次小生成树。在处理过程中,需特别注意所有边权重相等的情况,以避免错误。我们首先构建最小生成树,然后枚举每条非树边,检查其是否能形成更优的次小生成树。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Vue 2 中解决页面刷新和按钮跳转导致导航栏样式失效的问题
    本文介绍了如何通过配置路由的 meta 字段,确保 Vue 2 项目中的导航栏在页面刷新或内部按钮跳转时,始终保持正确的 active 样式。具体实现方法包括设置路由的 meta 属性,并在 HTML 模板中动态绑定类名。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 2023 ARM嵌入式系统全国技术巡讲旨在分享ARM公司在半导体知识产权(IP)领域的最新进展。作为全球领先的IP提供商,ARM在嵌入式处理器市场占据主导地位,其产品广泛应用于90%以上的嵌入式设备中。此次巡讲将邀请来自ARM、飞思卡尔以及华清远见教育集团的行业专家,共同探讨当前嵌入式系统的前沿技术和应用。 ... [详细]
  • 国内BI工具迎战国际巨头Tableau,稳步崛起
    尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • 资源推荐 | TensorFlow官方中文教程助力英语非母语者学习
    来源:机器之心。本文详细介绍了TensorFlow官方提供的中文版教程和指南,帮助开发者更好地理解和应用这一强大的开源机器学习平台。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 在前两篇文章中,我们探讨了 ControllerDescriptor 和 ActionDescriptor 这两个描述对象,分别对应控制器和操作方法。本文将基于 MVC3 源码进一步分析 ParameterDescriptor,即用于描述 Action 方法参数的对象,并详细介绍其工作原理。 ... [详细]
author-avatar
dsjdsjdsjjk_896
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有