热门标签 | 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


推荐阅读
  • Appium + Java 自动化测试中处理页面空白区域点击问题
    在进行移动应用自动化测试时,有时会遇到某些页面没有返回按钮,只能通过点击空白区域返回的情况。本文将探讨如何在Appium + Java环境中有效解决此类问题,并提供详细的解决方案。 ... [详细]
  • 如何清除Chrome浏览器地址栏的特定历史记录
    在使用Chrome浏览器时,你可能会发现地址栏保存了大量浏览记录。有时你可能希望删除某些特定的历史记录而不影响其他数据。本文将详细介绍如何单独删除地址栏中的特定记录以及批量清除所有历史记录的方法。 ... [详细]
  • 利用Selenium与ChromeDriver实现豆瓣网页全屏截图
    本文介绍了一种使用Selenium和ChromeDriver结合Python代码,轻松实现对豆瓣网站进行完整页面截图的方法。该方法不仅简单易行,而且解决了新版Selenium不再支持PhantomJS的问题。 ... [详细]
  • 探索新一代API文档工具,告别Swagger的繁琐
    对于后端开发者而言,编写和维护API文档既繁琐又不可或缺。本文将介绍一款全新的API文档工具,帮助团队更高效地协作,简化API文档生成流程。 ... [详细]
  • 本文探讨了在构建应用程序时,如何对不同类型的数据进行结构化设计。主要分为三类:全局配置、用户个人设置和用户关系链。每种类型的数据都有其独特的用途和应用场景,合理规划这些数据结构有助于提升用户体验和系统的可维护性。 ... [详细]
  • 气象对比分析
    本文探讨了不同地区和时间段的天气模式,通过详细的图表和数据分析,揭示了气候变化的趋势及其对环境和社会的影响。 ... [详细]
  • Python 内存管理机制详解
    本文深入探讨了Python的内存管理机制,涵盖了垃圾回收、引用计数和内存池机制。通过具体示例和专业解释,帮助读者理解Python如何高效地管理和释放内存资源。 ... [详细]
  • C#设计模式学习笔记:观察者模式解析
    本文将探讨观察者模式的基本概念、应用场景及其在C#中的实现方法。通过借鉴《Head First Design Patterns》和维基百科等资源,详细介绍该模式的工作原理,并提供具体代码示例。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 解决TensorFlow CPU版本安装中的依赖问题
    本文记录了在安装CPU版本的TensorFlow过程中遇到的依赖问题及解决方案,特别是numpy版本不匹配和动态链接库(DLL)错误。通过详细的步骤说明和专业建议,帮助读者顺利安装并使用TensorFlow。 ... [详细]
  • Linux中的yum安装软件
    yum俗称大黄狗作用:解决安装软件包的依赖关系当安装依赖关系的软件包时,会将依赖的软件包一起安装。本地yum:需要yum源,光驱挂载。yum源:(刚开始查看yum源中的内容就是上图 ... [详细]
  • 鼠标悬停出现提示信息怎么做
    概述–提示:指启示,提起注意或给予提醒和解释。在excel中会经常用到给某个格子增加提醒信息,比如金额提示输入数值或最大长度值等等。设置方式也有多种,简单的,仅为单元格插入批注就可 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • JSOI2010 蔬菜庆典:树结构中的无限大权值问题
    本文探讨了 JSOI2010 的蔬菜庆典问题,主要关注如何处理非根非叶子节点的无限大权值情况。通过分析根节点及其子树的特性,提出了有效的解决方案,并详细解释了算法的实现过程。 ... [详细]
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社区 版权所有