POj 1696 Space Ant (極角排序)

2021-06-29 01:05:12 字數 819 閱讀 6688

題意:乙隻螞蟻,只會向左轉,現在給出平面上很多個點,求解一種走法,能使得螞蟻能經過的點最多,每個頂點該螞蟻只能經過一次,且所行走的路線不能發生交叉.

對於題目所輸入的點,先找出最左下方的頂點(即縱座標最小的頂點),然後對剩下的頂點按照對與左下點的極角排序,然後反覆找最左下的點,反覆進行極角排序,同時記錄排序後左下的頂點.

極角排序方法:利用叉積,看向量p1和p2的叉積是否小於零,是則說明p1在p2逆時針方向,即p1的極角比p2的大,極角相同則按離p0距離降序排序.

#include 

#include

#include

#include

#include

using

namespace

std;

const

int max=55;

struct pointp[max],cur;

int pnum[max];

double dis(point a ,point b)

int mnt(point p0 ,point p1 ,point p2)

bool judgement(point a ,point b)

bool cmp(point a ,point b)

sort(p,p+n,cmp);

memset(pnum,0,sizeof(pnum));

int cnt=0;

cur=p[0];

pnum[cnt++]=p[0].id;

for(int i=1 ;icout

<<" "

0;}

POJ 1696 Space Ant 計算幾何

題意 給出一系列二維點,問從 0,y 出發,y是這些點裡縱座標的最小值,只能左轉或者直走,並且每個點只能走一次,輸出能走完這些點的路徑的順序。題解 先找到第乙個點,它肯定是當y取最小時的那個點,然後接下來開始遍歷,每次找的點與pre連成的線都要與pre和first連成的線的夾角最小,找到後就更新fi...

poj 1696 Space Ant 有關極角

題意 從最低的點開始,不能向右拐,問能經過多少點?能定是經過所有點了 從最低點開始,求與其極角最小的點,作為新的起點,在需找與這個點成極角最小的點,依次即可 include includestruct point dian 60 int n int dis point a,point b int c...

poj 1696 Space Ant 卷包裹法

首先好好研究卷包裹法的思路,發現每一plant一定是可以走到的。這篇文章寫的很好 這裡 然後就是把這些點的標號存起來啦,因為不是求點的座標,要儲存原來的標號,所以弄了乙個struct 作為對映原來的標號用。bool 陣列依舊用來表示是否已經被加入 卷包裹遍歷集合 include include in...