Як побудувати подвійно пов'язаний список ребер із набором сегментів рядків?


10

Для даного планарного графіка вбудованого в площину, визначену набором відрізків рядків , кожен відрізок представлений своїми кінцевими точками . Побудуйте структуру даних DCEL для планарного підрозділу, опишіть алгоритм, доведіть його правильність та покажіть складність.Г(V,Е)Е={е1,...,ем}еi{Li,Ri}

Відповідно до цього опису структури даних DCEL , існує багато зв'язків між різними об'єктами (тобто вершинами, ребрами та гранями) DCEL. Отже, DCEL, здається, важко побудувати та підтримувати.

Чи знаєте ви якийсь ефективний алгоритм, який може бути використаний для побудови структури даних DCEL?

Відповіді:


8

Структура даних (конвенції, що відповідають статті Вікіпедії ):

struct half_edge;

struct vertex {
    struct half_edge *rep;  /* rep->tail == this */
};

struct face {
    struct half_edge *rep;  /* rep->left == this */
};

struct half_edge {
    struct half_edge *prev;  /* prev->next == this */
    struct half_edge *next;  /* next->prev == this */
    struct half_edge *twin;  /* twin->twin == this */
    struct vertex *tail;     /* twin->next->tail == tail &&
                                prev->twin->tail == tail */
    struct face *left;       /* prev->left == left && next->left == left */
};

Алгоритм

  1. Для кожної кінцевої точки створіть вершину .

  2. Для кожного вхідного сегмента створіть дві половинки та призначте їх хвостові вершини та близнюки.

  3. Для кожної кінцевої точки сортуйте половину ребер, вершина хвоста яких є кінцевою точкою за годинниковою стрілкою.

  4. Кожній парі пів-ребер e1, e2в порядку годинникової стрілки призначте e1->twin->next = e2і e2->prev = e1->twin.

  5. Виберіть один із пів-країв і призначте його як представника для кінцевої точки. (Вироджений випадок: якщо eв відсортованому списку є лише одна половина , set e->twin->next = eі e->prev = e->twin). Наступні покажчики - перестановка на півкрайках.

  6. Для кожного циклу виділіть та призначте структуру обличчя .


2
В основному купу суворої бухгалтерії. Ймовірно, тому автори підручників неохоче йдуть у деталі.
pshufb
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.