資料結構:
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...