poj 1696:Space Ant(计算几何,凸包变种,极角排序)
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 2876 | Accepted: 1839 |
Description
- 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
Output
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
#include <iostream>
using namespace std;
#define eps 1e-10
struct Point{ //定义点
double x,y;
Point(double x=,double y=):x(x),y(y) {}
};
typedef Point Vector; //重定义向量
Vector operator + (Vector a,Vector b) //向量+向量
{
return Vector(a.x+b.x,a.y+b.y);
}
Vector operator - (Point a,Point b) //点-点 = 向量
{
return Vector(a.x-b.x,a.y-b.y);
}
double Cross(Vector a,Vector b) //求叉积
{
return a.x*b.y-b.x*a.y;
}
int main()
{
int T;
cin>>T;
while(T--){
int n,i;
Point p[];
bool isw[] = {}; //记录走没走过
cin>>n;
for(i=;i<=n;i++){ //输入点集
int t;
cin>>t;
cin>>p[t].x>>p[t].y;
}
//找出y坐标最小的那个点
double yMin=p[].y;
int num = ;
for(i=;i<=n;i++){
if(p[i].y < yMin){
yMin = p[i].y;
num = i;
}
}
//构成凸包
int pl[]; //存储结果
int j;
pl[] = num;
isw[pl[]] = true;
for(i=;i<n;i++){
for(j=;j<=n;j++) //选择一个没走过的点
if(!isw[j])
break;
pl[i+] = j;
for(j=;j<=n;j++){ //选择最右边的点
if(pl[i+]==j || isw[j])
continue;
if(Cross(p[j] - p[pl[i]],p[pl[i+]] - p[pl[i]])>)
pl[i+] = j;
}
isw[pl[i+]] = true;
}
cout<<n<<' ';
for(i=;i<=n;i++)
cout<<pl[i]<<' ';
cout<<endl;
}
return ;
}
Freecode : www.cnblogs.com/yym2013
poj 1696:Space Ant(计算几何,凸包变种,极角排序)的更多相关文章
- 2018.07.04 POJ 1696 Space Ant(凸包卷包裹)
Space Ant Time Limit: 1000MS Memory Limit: 10000K Description The most exciting space discovery occu ...
- POJ 1696 Space Ant(凸包变形)
Description The most exciting space discovery occurred at the end of the 20th century. In 1999, scie ...
- poj 1696 Space Ant (极角排序)
链接:http://poj.org/problem?id=1696 Space Ant Time Limit: 1000MS Memory Limit: 10000K Total Submissi ...
- POJ 1696 - Space Ant 凸包的变形
Technorati Tags: POJ,计算几何,凸包 初学计算几何,引入polygon后的第一个挑战--凸包 此题可用凸包算法做,只要把压入凸包的点从原集合中排除即可,最终形成图形为螺旋线. 关于 ...
- POJ 1696 Space Ant(极角排序)
Space Ant Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2489 Accepted: 1567 Descrip ...
- POJ 1696 Space Ant 【极角排序】
题意:平面上有n个点,一只蚂蚁从最左下角的点出发,只能往逆时针方向走,走过的路线不能交叉,问最多能经过多少个点. 思路:每次都尽量往最外边走,每选取一个点后对剩余的点进行极角排序.(n个点必定能走完, ...
- POJ 1696 Space Ant 卷包裹法
Space Ant Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 3316 Accepted: 2118 Descrip ...
- poj 1696 Space Ant(模拟+叉积)
Space Ant Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 3840 Accepted: 2397 Descrip ...
- POJ 1696 Space Ant(点积的应用)
Space Ant 大意:有一仅仅蚂蚁,每次都仅仅向当前方向的左边走,问蚂蚁走遍全部的点的顺序输出.開始的点是纵坐标最小的那个点,開始的方向是開始点的x轴正方向. 思路:从開始点開始,每次找剩下的点中 ...
随机推荐
- java 清单文件
Java之jar打包 标签: javajarmanifestmain-classclass-path 2016-03-30 00:29 993人阅读 评论(0) 收藏 举报 分类: Java(6) ...
- Android 弹幕效果开发案例
概述 现在有个很流行的效果就是弹幕效果,满屏幕的文字从右到左飘来飘去.看的眼花缭乱,看起来还蛮cool的 现在就是来实现这一的一个效果,大部分的都是从右向左移动漂移,本文的效果中也支持从左向右的漂移移 ...
- Linux配置 xampp下的https证书(腾讯云申请)
准备 从腾讯云后台SSL证书管理里下载证书 一.上传文件 解压出来以后有三个文件: 1_root_bundle.crt 2_www.xxxxx.com.crt 3_www.xxxxx.com.key ...
- 利用Oracle 发送邮件(utl_smtp)
发送邮件的方法有很多,.NET前台也可以通过创建邮件类的形式, 通过微软提供的System.Net.Mail.dll 也可以简单的发送邮件.但是代码比较长,操作起来虽然很简单(很多细节忽略了). 这里 ...
- 用Visual studio2012在Windows8上开发内核驱动监视进程创建
在Windows NT中,80386保护模式的“保护”比Windows 95中更坚固,这个“镀金的笼子”更加结实,更加难以打破.在Windows 95中,至少应用程序I/O操作是不受限制的,而在Win ...
- windows 2003 群集
http://www.tudou.com/programs/view/-UZoSIuUvXs/
- RPC服务框架dubbo(三):Dubbo支持的协议
1.Dubbo 1.1 Dubbo官方推荐的协议. 1.2 本质:使用NIO和线程池进行处理. 1.3 缺点:大文件传输时可能出现文件传输失败问题. 2.RMI 2.1 JDK提供的协议,远程方法调用 ...
- CentOS安装使用git
yum install git yum install git-gui (可选) git config --global user.name "gg" git config --g ...
- mysql root 用户被删
[root@M ~]# vi /etc/my.cnf [mysqld] skip-grant-tables [root@M ~]# service mysqld restart Shutting do ...
- HDU 2844 Coin 多重背包
Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...