凸包的判定及將凸包中的點逆時針存在陣列中

2021-08-09 09:06:01 字數 726 閱讀 2194

資料結構:

struct point   

friend bool operator < (const point &l, const point &r)

} p[maxn];

判斷凸包:

double mult(const point &a, const point &b, const point &o)

主函式:

int graham(point *p,int n,point* set)//p為點集(從1開始一共有n個)set為逆時針以最左下開始的構成凸包的點集,返回值是構成凸包的點的個數  

int len=head;

set[++head]=p[n-1];

for (int k=n-2;k>=1;k--)

return --head;

}

為什麼要判兩遍呢,其實我們可以看看排序演算法

我們的p[0]其實是左下的乙個點,然後p[n-1]其實是右上的乙個點

我們正著來一遍的話就只是逆時針從左下到右上點做了乙個凸包,接下來還要從右上到左上做乙個凸包,這才能算是完整的凸包

同時我們可以看到,我們起點入隊了兩次,所以咱們最後要return --head;

其實這部落格我寫了兩遍,這次只是放在acm專屬模板裡,準備比賽用而已

poj2007凸包graham逆時針輸出

題意 給出一組點,包含原點,求凸包,並從原點開始按照逆時針方向輸出 include include include define max 1000 using namespace std struct points points p max int n,l,res max top bool cmp ...

凸包的求法

凸包的求法 現在已經證明了凸包演算法的時間複雜度下界是o n logn 但是當凸包的頂點數h也被考慮進去的話,krikpatrick和seidel的剪枝搜尋演算法可以達到o n logh 在漸進意義下達到最優。最常用的凸包演算法是graham掃瞄法和jarvis步進法。本文只簡單介紹一下graham...

求凸包點和面積及周長

author linzhiq date 2018 10 01 17 28 graham掃瞄法 求凸包 includeusing namespace std const double eps 1e 8 const double pi acos 1.0 struct point point double...