Построение выпуклой оболочки, не должно занимать много времени. А надо признать, все приведенные мной реализации решения задачи построения выпуклой оболочки страдают большим объемом.
Реализация данного алгоритма на e-maxx’e порадовала свой лаконичностью.
Но увиденное у indy256 порадовала еще больше:
- vector<point> convexHull(vector<point> p) {
- int n = p.size();
- if (n <= 1)
- return p;
- int k = 0;
- sort(p.begin(), p.end());
- vector<point> q(n * 2);
- for (int i = 0; i < n; q[k++] = p[i++])
- for (; k >= 2 && !cw(q[k - 2], q[k - 1], p[i]); --k)
- ;
- for (int i = n - 2, t = k; i >= 0; q[k++] = p[i--])
- for (; k > t && !cw(q[k - 2], q[k - 1], p[i]); --k)
- ;
- q.resize(k - 1 - (q[0] == q[1]));
- return q;
- }
* This source code was highlighted with Source Code Highlighter.
Очень крутая реализация =). Возьмем ее на вооружение, как и весь сайт indy256
Комментариев нет:
Отправить комментарий