У мене є графік BGL і я хочу створити розтягнуте дерево за допомогою BGL.
Починаючи з вказаної вершини, я хочу додатинайкоротший край мого графіка, який з'єднується з цією вершиною. З цього моменту я хочу завжди вибрати найкоротший край, який з'єднується з існуючим на сьогодні графіком.
Отже, я хочу додати обмеження в тому, що кожен новий край повинен бути підключений до графіка вже під час перебування за критерієм дерева, що охоплює, що циклів немає.
Це було б не важко зробити вручну, але оскільки я хочу дізнатися щось про BGL, я хотів би знати, який алгоритм найкраще відповідає моїй проблемі.
Відповіді:
4 для відповіді № 1Здається, що ти росте дерево, починаючиз вказаною вершиною, додавши найлегший край, який з'єднує вершину у вашому дереві, до вершини, яка "не у вашому дереві. Якщо це так, ви реалізуєте алгоритм Prim", який дає вам MST. Це чудово описано в главі MST "Алгоритми" Cormen, Leiserson, Rivest & Stein.
(Я кажу "звучить як", оскільки вислів "найкоротший край, який з'єднується з наявним на сьогодні графіком" є трохи розпливчастим.)
2 для відповіді № 2
Це алгоритм Prim: http://en.wikipedia.org/wiki/Prim%27s_algorithm
Ви отримаєте мінімальну пролітну ялинку!
Не впевнений, якщо ви будете накладати з ним багато BGL, алеу будь-якому разі, що в цій ідеї важко - знайти "мінімальний край": подивіться псевдо-код на сторінці Вікіпедії, щоб побачити, як це можна зробити за допомогою двійкової купи. Для кращої складності вам знадобиться купа Фібоначчі.