У меня есть ненаправленный взвешенный граф G с набором узлов и взвешенных ребер.Networkx кратчайший алгоритм дерева
Я хочу знать, если есть способ, реализованный в NetworkX найти минимального остовного дерева в графе между заданными узлами (например nx.steiner_tree (G, [ «Берлин», «Киль», «Munster» , 'Nurnberg'])) (по-видимому, их нет?)
У меня нет точек репутации для отправки изображений. Ссылка на подобным же образом может быть: Map (A3, C1, C5, E4)
Что я имею в виду:
- проверки dijkstras кратчайших путей между всеми узлами назначения;
- поместить все узлы (промежуточные и получатели) и ребра на новый граф V;
- вычислить mst на V (для удаления циклов путем разбиения самого длинного края);
Может быть, есть лучшие способы (corectness- and computation-wise)? Потому что этот подход довольно плох с тремя узлами назначения и становится лучше с большим количеством узлов.
P.S. Мой график плоский (его можно нарисовать на бумаге так, чтобы ребра не пересекались). Может быть, может помочь какой-то метод весны/силы (как в d3-визуализации)?
Спасибо, что указал направо. Но алгоритмы, приведенные в ответах, не совсем решают его. Ближайшей вещью к истине является б) вариация AJed, но проблема заключается в том, что результат в значительной степени зависит от того, на каком этапе вы начинаете (может быть, это не проблема для невзвешенного графика). То, что я сейчас думаю, выглядит следующим образом: 1) проверить кратчайшие пути dijkstras между всеми узлами; 2) поместить все узлы в новый граф; 3) вычислить mst (удалить циклы, разбив самый длинный край) – arvyzu