poj 1696 Space Ant 卷包裹法

2021-06-21 15:35:29 字數 1914 閱讀 7715

首先好好研究卷包裹法的思路,發現每一plant一定是可以走到的。

這篇文章寫的很好 這裡

然後就是把這些點的標號存起來啦,因為不是求點的座標,要儲存原來的標號,所以弄了乙個struct 作為對映原來的標號用。

bool 陣列依舊用來表示是否已經被加入「卷包裹遍歷集合」。

**:#include#include#include#include#include#includeconst double eps=1e-10;

const double pi=acos(-1.0);

using namespace std;

struct point

void operator<<(point &a)

int sgn(double x)

typedef point vector;

vector operator +(vector a,vector b)

vector operator -(vector a,vector b)

vector operator *(vector a,double p)

vector operator /(vector a,double p)

ostream &operator<<(ostream & out,point & p)

point getlineprojection(point p,point a,point b)

bool segmentproperintersection(point a1,point a2,point b1,point b2)

bool onsegment(point p,point a,point b)

double polygonarea(point *p,int n)

else

}// 向量極角公式

double angle(vector v)

int getcirclecircleintersection(circle c1,circle c2,vector&sol)

if(dcmp(c1.r+c2.r-d)<0) return 0; // 外離

if(dcmp(fabs(c1.r-c2.r)-d)>0) return 0; // 內含

double a=angle(c2.c-c1.c);

double da=acos((c1.r*c1.r+d*d-c2.r*c2.r)/(2*c1.r*d));

point p1=c1.point(a-da);

point p2=c1.point(a+da);

sol.push_back(p1);

if(p1==p2) return 1; // 相切

else

}// 求點到圓的切線

int gettangents(point p,circle c,vector *v)

else

}// 求兩圓公切線

int gettangents(circle a,circle b,point *a,point *b)

return cnt;

}// 幾何演算法模板

int ispointinpolygon(point p,point * poly,int n)

if(wn!=0) return 1;

else return 0;

}bool vis[100];

int n;

struct event;

event e[100];

bool event_cmp(event a,event b)

{ return a.p>t;

int temp_int;

while(t--)

{memset(vis, 0, sizeof(vis));

cin>>n;

for(int i=0;i

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 (極角排序)

題意 乙隻螞蟻,只會向左轉,現在給出平面上很多個點,求解一種走法,能使得螞蟻能經過的點最多,每個頂點該螞蟻只能經過一次,且所行走的路線不能發生交叉.對於題目所輸入的點,先找出最左下方的頂點 即縱座標最小的頂點 然後對剩下的頂點按照對與左下點的極角排序,然後反覆找最左下的點,反覆進行極角排序,同時記錄...