Нахождение максимума ориентированного графа

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

Что касается реализации, я храню каждое соединение в multimap, multimap ключевой край хвост multimap значение — это край ребра Так скажи, что у меня есть следующие пары:

  • (1, 2)
  • (2, 3)
  • (1, 4)

На этом графике, если 1 был заданным узлом, каждый узел может быть прямо или косвенно достигнут. Если другая пара была добавлена ​​к multimap: (5, 3) 5 не может быть напрямую или косвенно доступным из 1, и ни один узел, кроме 3, не будет доступен из 5, поэтому ни один из заданных узлов в этом графе не сможет достичь всех других узлов.

Мой вопрос заключается в следующем: если все, что я делаю с этим графиком, это проверка, может ли один узел достичь всех других узлов, я должен добавить ребра к multimap сделать все косвенные соединения прямыми, а затем проверить, все ли узлы подключены к данному узлу? Или есть лучший способ сделать это?

1

Решение

Итак, вы используете мультикарту в качестве списка смежности? Вы спрашиваете нас, должны ли вы добавить смежности в этот список, если два узла могут достигать друг друга? Я настоятельно рекомендую против такого подхода. Если позже вы захотите выполнить любой обход графика, ваша структура будет загрязнена ребрами, которых на самом деле нет.

Если вам действительно нужно запоминать такую ​​информацию, используйте отдельную структуру для доступности.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]