Эффективно расширить набор краев графика

StackOverflow https://stackoverflow.com/questions/7345117

  •  27-10-2019
  •  | 
  •  

Вопрос

У меня есть набор краев с графика, и я хотел бы расширить его со всеми краями, которые имеют вершину с любым преимуществом. Как я мог сделать это эффективно с boost::graphs?

Единственный способ, которым я смог придумать, - это наивное решение извлечения всех источников и целевых вершин, используя boost::adjacent_vertices Чтобы получить все прилечения, а затем создать все новые края с boost::edge. Анкет Есть ли лучший способ сделать это?

Контекст: Вершины графика являются центроидами триангуляции местности, края соединяют вершины, соответствующие треугольники которых являются смежными (так что своего рода двойной график). Набор краев, которые я собираюсь расширить, соответствует межтриангским путям, которые заблокированы, и заблокированная область расширяется. Область своего рода круговая, поэтому большинство краев, которые я увижу, используя мой наивный подход выше, уже будет частью набора.

Это было полезно?

Решение

Вместо того, чтобы рассмотреть все соседние вершины на каждом шаге для создания новых краев, используйте карту свойств, чтобы отметить, уже встречающиеся. Таким образом, вам необходимо рассмотреть некмысловные края только на каждом шаге. Вершина помечена после добавления всех краев, связанных с ней в ваш набор.

Учитывая тот факт, что внутренняя структура данных, используемая Boost :: Graph, является либо списком смежности, либо матрицей смежности, я не думаю, что любое дальнейшее улучшение возможно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top