Я попытался получить минимальное связующее дерево неориентированного взвешенного графика. Однако мне нужно найти кратчайший путь между одной или несколькими парами узлов. После этого я должен найти минимальное остовное дерево графика. Я уже нашел кратчайший путь между необходимыми узлами, но я не знаю, как найти минимальное связующее дерево, включая эти кратчайшие пути. Позвольте мне привести пример.
G
|2
H A
|1 |6
F ------B
|1 | 7
E -----D-----C
2 8
Существует также край между A и E с 2 весом, но я не мог его показать.
Теперь, Прежде всего, мне нужно найти кратчайший путь между A и E (я должен сделать это из-за своего приложения), который является AEDC, а затем подключить весь график с минимальным охватом. Есть ли кто-нибудь, кто поможет мне дать какую-то подсказку? Извините за плохой английский, это не мой родной язык
Просто MST
Если вы просто хотите MST, это просто включает в себя запуск алгоритма Kruskal (см. Ниже) или алгоритм Prim:
- Инициализируйте дерево с единственной вершиной, выбранной произвольно из графика.
- Вырастите дерево одним краем: из ребер, которые соединяют дерево с вершинами еще не на дереве, найдите край минимального веса и перенесите его в дерево.
- Повторите шаг 2 (пока все вершины не будут в дереве).
Это не связано с получением кратчайших путей между вершинами. Фактически, это не обязательно будет включать в себя кратчайшие пути. Рассматривать:
A
1 |\
B \
1 | \ 2
C \
1 | \
D-----E
1
Самый короткий путь между A и E равен 2 (только непосредственно от A до E), но MST (ABCDE) не включает этот край.
"MST", включая несколько кратчайших путей
Если вы хотите найти MST, включая несколько кратчайших путей, это самая интересная проблема.
Это можно решить, выполнив алгоритм Крускаля с небольшим изменением.
Выведено из Википедии: