215 похожих чатов

Всем привет! Разбирается тут кто-то в графах? Мне нужно создать

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

8 ответов

15 просмотров

Красно-черное дерево?

Только не бейте меня, но prolog. Подобные задачи на нем решаются очень быстро. Практически у каждого языка программирования есть библиотеки для интегрирования кода пролога

Dima- Автор вопроса
Даниил Агниашвили
Красно-черное дерево?

Почитал сейчас, но как мне показалось, это немного другая тема

Dima
Почитал сейчас, но как мне показалось, это немного...

О, показалось что то же самое, но хорошо, помог чем смог

Я, конечно, дилетант в графах и уже жду море критики но все же)))) Что, если построить матрицу графа, и делать так: - берём первую интересующую нас красную вершину и находим путь с помощью поиска в глубину/ширину до интересующих нас синих вершин. Нашли-обнулили колонки соответствующих вершин, по которым прошлись. - повторяем процедуру, пока: а) сумма по колонкам хотя бы из одной категории (синие, красные) будет равняться 0 б) нельзя будет соединить пару вершин. Можно добавить условие, что, если есть несколько соединений для одной красной вершины, то должна выбираться та, после которой сумма/ранг матрицы будет максимальным...

Добрый вечер. На рисунке у вас не просто графы, а деревья. Вам нужно решать задачу именно для деревьев, или для произвольных графов? Разница есть.

Dima- Автор вопроса
Михаил Адигеев
Добрый вечер. На рисунке у вас не просто графы, а ...

Здравствуйте, да именно для деревьев, забыл уточнить

Dima
Здравствуйте, да именно для деревьев, забыл уточни...

У деревьев есть такое свойство: любые две вершины соединены ровно одним путем. То есть, по крайней мере разные пути перебирать не придется. Можно построить множество путей, соединяющих синие вершины с красными, их будет br штук, где b - количество синих вершин, r - количество красных. И построить новый граф, в котором вершинами будут эти самые пути, а ребра соединяют любые две вершины, для которых соответствующие пути на исходном графе пересекаются. И на полученном графе найти наибольшее независимое множество вершин. Это и будет точное решение. Правда, поиск наибольшего независимого множества вершин - вычислительно сложная задача :(

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта