【发布时间】:2018-07-28 04:50:31
【问题描述】:
我是 StackOverflow 的新手,这是我在这里的第一个问题。
我在Convex Hull上解决了一些问题,在Codechef上看到vjudges的答案提交时,我发现他们反复使用以下函数来找出一组点的凸包。
int n = (int)p.size();
if (n <= 1)
return p;
sort(p.begin(), p.end());
int cnt = 0;
vector<Pint> q(n * 2);
for (int i = 0; i < n; q[cnt++] = p[i++])
for (; cnt >= 2 && !cw(q[cnt - 2], q[cnt - 1], p[i]); --cnt)
;
for (int i = n - 2, t = cnt; i >= 0; q[cnt++] = p[i--])
for (; cnt > t && !cw(q[cnt - 2], q[cnt - 1], p[i]); --cnt)
;
q.resize(cnt - 1 - (q[0] == q[1]));
return q;
有人可以解释一下这个函数背后的逻辑是什么,它与 Jarvis 或 Graham 的方法有什么不同吗?
【问题讨论】:
标签: convex-hull