1、凸包

 1 inline bool cmp(const POINT &a, const POINT &b) {
 2     if(a.y == b.y) return a.x < b.x;
 3     return a.y < b.y;
 4 }
 5 //turn left
 6 inline bool Cross(POINT &sp, POINT &ep, POINT &op) {
 7     return (sp.x - op.x) * (ep.y - op.y) - (ep.x - op.x) * (sp.y - op.y) >= 0;
 8 }
 9   
10 inline double dist(POINT &a, POINT &b) {
11     return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
12 }
13   
14 void Graham_scan() {
15     std::sort(p, p + n, cmp);
16     top = 1;
17     stk[0] = 0; stk[1] = 1;
18     for(int i = 2; i < n; ++i) {
19         while(top && Cross(p[i], p[stk[top]], p[stk[top - 1]])) --top;
20         stk[++top] = i;
21     }
22     int len = top;
23     stk[++top] = n - 2;
24     for(int i = n - 3; i >= 0; --i) {
25         while(top != len && Cross(p[i], p[stk[top]], p[stk[top - 1]])) --top;
26         stk[++top] = i;
27     }
28 }
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-05-21
  • 2021-07-25
猜你喜欢
  • 2021-07-15
  • 2021-12-30
  • 2021-10-26
  • 2021-11-13
相关资源
相似解决方案