Мне дают Направленный граф это не взвешено. Если вы путешествуете только с направлением ребер, если мне дана вершина, я хочу знать, достижима ли любая другая вершина. Если график Полный график это очевидно. Меня интересует случай, когда график неполон.
Что касается реализации, я храню каждое соединение в multimap
, multimap
ключевой край хвост multimap
значение — это край ребра Так скажи, что у меня есть следующие пары:
На этом графике, если 1 был заданным узлом, каждый узел может быть прямо или косвенно достигнут. Если другая пара была добавлена к multimap
: (5, 3) 5 не может быть напрямую или косвенно доступным из 1, и ни один узел, кроме 3, не будет доступен из 5, поэтому ни один из заданных узлов в этом графе не сможет достичь всех других узлов.
Мой вопрос заключается в следующем: если все, что я делаю с этим графиком, это проверка, может ли один узел достичь всех других узлов, я должен добавить ребра к multimap
сделать все косвенные соединения прямыми, а затем проверить, все ли узлы подключены к данному узлу? Или есть лучший способ сделать это?
Итак, вы используете мультикарту в качестве списка смежности? Вы спрашиваете нас, должны ли вы добавить смежности в этот список, если два узла могут достигать друг друга? Я настоятельно рекомендую против такого подхода. Если позже вы захотите выполнить любой обход графика, ваша структура будет загрязнена ребрами, которых на самом деле нет.
Если вам действительно нужно запоминать такую информацию, используйте отдельную структуру для доступности.
Других решений пока нет …