作者:dsjdsjdsjjk_896 | 来源:互联网 | 2024-10-30 00:41
针对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:
- It can not turn right due to its special body structure.
- It leaves a red path while walking.
- 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.
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