Как найти минимальные соединители для подключения выбранных вершин (подмножество вершин) - PullRequest
0 голосов
/ 15 апреля 2020

предположим, что у меня есть неориентированный граф с 10 вершинами и 24 ребрами, который соединяется друг с другом, в качестве примера, если я приведу такой ввод (это не фактический, фактический - 10 * 10)

int graph[][] = new int[][]{{0, 0, 0, 0, 0, 0},
                            {0, 0, 2, 0, 6, 0},
                            {0, 2, 0, 3, 8, 5},
                            {0, 0, 3, 0, 0, 7},
                            {0, 6, 8, 0, 0, 9},
                            {0, 0, 5, 7, 9, 0}};

поэтому я хочу найти минимальные соединители для подключения указанных c вершин ex: вершины 0,2,4 . в настоящее время я применил алгоритм простых чисел, чтобы получить минимальные соединители по всем ребрам графа, но поскольку я не хочу, чтобы все ребра были включены в мой MST, мне нужна некоторая помощь для достижения этого.

  • Я не могу удалить края, чего я не хочу в начале, потому что это отключит график

, пожалуйста, помогите.

1 Ответ

0 голосов
/ 15 апреля 2020

Итак, у вас есть 6 вершин и 7 неориентированных взвешенных ребер:

 1 ←→ 2 (w=2)
 1 ←→ 4 (w=6)
 2 ←→ 3 (w=3)
 2 ←→ 4 (w=8)
 2 ←→ 5 (w=5)
 3 ←→ 5 (w=7)
 4 ←→ 5 (w=9)

Вам необходимо соединить вершины 0, 2 и 4, чтобы вы построили новый граф с этими 3 вершинами и нашли кратчайшие пути между ними.

 0 ←→ 2 (no edge)
 0 ←→ 4 (no edge)
 2 ←→ 4 (w=8)

Этого, конечно, нельзя сделать, поскольку у вершины 0 нет ребер.

Итак, давайте попробуем вершины 1, 3 и 5 вместо:

 1 ←→ 3 (w=5, 1 ←→ 2 ←→ 3)
 1 ←→ 5 (w=7, 1 ←→ 2 ←→ 5)
 3 ←→ 5 (w=7, 3 ←→ 5)

Теперь примените к нему минимальное связующее дерево (MST):

 1 ←→ 3 ←→ 5 (w=12)

Расширение до исходного графика:

 1 ←→ 2 ←→ 3 ←→ 5 (w=12)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...