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

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

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

8 ответов

10 просмотров

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
Подскажите, а есть vault lite или ченить такое?) А то нужен вольт для похода в вольт, но весит он ~500 мб) как-то многовато для парочки запросов ))
Alexandr Orloff
17
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Карта сайта