Создание нескольких минимальных остовных деревьев с конкретными требованиями

У меня есть неориентированный граф, который содержит несколько узлов типа A и несколько узлов типа B. Мне нужно создать граф (не обязательно связанный глобально), чтобы каждый узел типа A был связан (через любое количество ребер) хотя бы с одним узел типа В. Все ребра имеют веса. Я хочу создать MST, удовлетворяющий этому условию, но не могу придумать лучший алгоритм для этого.

Позвольте мне уточнить. Если у меня есть один узел типа B, все, что мне нужно сделать, это просто создать MST в обычном режиме. Но поскольку у меня более одного узла типа B, может существовать более эффективный способ создания MST, который не потребует от меня соединения всех вершин в графе. Например, я могу игнорировать узел типа B, если это не самое дешевое соединение с любым узлом типа A. В конце концов, у меня вполне может быть граф с несколькими несвязанными MST, а не с одним.

Каков наилучший алгоритм для этого?


person John Lexus    schedule 16.03.2018    source источник
comment
Можете ли вы немного пояснить свое описание и/или добавить пример, пожалуйста? Если я хорошо понимаю, узел типа A должен быть подключен по крайней мере к одному узлу (типа A или B, нам все равно). Но как насчет узлов типа B?   -  person Damien Prot    schedule 16.03.2018
comment
@DamienProt В сообщении уже говорится, что алгоритм может игнорировать узел B. Все, что нам нужно, — это чтобы в каждом связном графе был хотя бы один B-узел.   -  person Prune    schedule 16.03.2018


Ответы (1)


Повторите этот процесс:

  1. Найдите наименее дорогое соединение для соединения узла типа A с узлом типа B.
  2. Измените метку этого узла A на тип B.
  3. Повторяйте, пока не останется узлов A.

Обратите внимание на одно важное свойство вашей задачи: любое минимальное решение должно иметь каждый узел A, соединенный с ровно одним узлом B.

person Prune    schedule 16.03.2018