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


推荐阅读
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 本文详细介绍了C++中的构造函数,包括其定义、特点以及如何通过构造函数进行对象的初始化。此外,还探讨了转换构造函数的概念及其在不同情境下的应用,以及如何避免不必要的隐式类型转换。 ... [详细]
  • Windows操作系统提供了Encrypting File System (EFS)作为内置的数据加密工具,特别适用于对NTFS分区上的文件和文件夹进行加密处理。本文将详细介绍如何使用EFS加密文件夹,以及加密过程中的注意事项。 ... [详细]
  • 解决Visual Studio Code中PHP Intelephense误报问题
    PHP作为一种高度灵活的编程语言,其代码结构可能导致Intelephense插件在某些情况下报告不必要的错误或警告。自1.3.3版本起,Intelephense引入了多个配置选项,允许用户根据具体的工作环境和编程风格调整这些诊断信息的显示。 ... [详细]
  • 本文介绍了如何通过安装 sqlacodegen 和 pymysql 来根据现有的 MySQL 数据库自动生成 ORM 的模型文件(model.py)。此方法适用于需要快速搭建项目模型层的情况。 ... [详细]
  • 本文探讨了程序员这一职业的本质,认为他们是专注于问题解决的专业人士。文章深入分析了他们的日常工作状态、个人品质以及面对挑战时的态度,强调了编程不仅是一项技术活动,更是个人成长和精神修炼的过程。 ... [详细]
  • 本文探讨了在一个物理隔离的环境中构建数据交换平台所面临的挑战,包括但不限于数据加密、传输监控及确保文件交换的安全性和可靠性。同时,作者结合自身项目经验,分享了项目规划、实施过程中的关键决策及其背后的思考。 ... [详细]
  • 心理学经典:《思考致富》
    《思考致富》是由美国著名成功学大师拿破仑·希尔撰写的一部重要著作,该书基于希尔长达20年的深入研究和访谈,探讨了个人成功的核心要素。书中不仅揭示了成功的关键,还提供了一系列实用的方法和策略。 ... [详细]
  • 本文将详细介绍如何在二进制和十六进制之间进行准确的转换,并提供实际的代码示例来帮助理解这一过程。 ... [详细]
  • empty,isset首先都会检查变量是否存在,然后对变量值进行检测。而is_null只是直接检查变量值,是否为null,因此如果变量未定义就会出现错误!检测一个变量是否是null ... [详细]
  • 在处理大数据量的SQL分页查询时,通常需要执行两次查询来分别获取数据和总记录数。本文介绍了一种优化方法,通过单次查询同时返回分页数据和总记录数,从而提高查询效率。 ... [详细]
  • 本文通过一个具体的实例,介绍如何利用TensorFlow框架来计算神经网络模型在多分类任务中的Top-K准确率。代码中包含了随机种子设置、模拟预测结果生成、真实标签生成以及准确率计算等步骤。 ... [详细]
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社区 版权所有