У меня есть сильно связанный граф, и я хочу найти пары узлов с минимум двумя путями между ними. Можете ли вы дать мне представление об алгоритме или что-то, что я могу использовать? Спасибо.
Найдите узлы графа с минимум 2 путями между ними
Ответы (1)
Первое, что приходит на ум, это использовать DFS следующим образом:
DFS начинается с некоторой вершины v1 и "обнаруживает" вершины одну за другой. Каждая обнаруженная вершина рекурсивно запускает свою собственную DFS и "обрабатывается" после завершения рекурсии.
Предположим, что есть два направленных пути из v1 в v2. В этом случае v2 будет «обнаружен» (посредством одного из этих двух путей, идущих от v1 к v2) и в конечном итоге «обработан». Однако рекурсия v1 еще не закончена. Поток DFS собирается достичь v2 во второй раз (на этот раз с использованием второго пути от v1 к v2), но на этот раз v2 уже находится в состоянии «обработано».
Поэтому всякий раз, когда мы сталкиваемся с «обработанным», вершина, это означает, что к ней ведет второй путь.
Этот метод работает для всех видов ориентированных графов, он не использует тот факт, что граф сильно связан, поэтому, возможно, этот факт можно использовать для более оптимального решения.
Также обратите внимание, что для неориентированных графов ситуация намного проще — нам просто нужно обнаружить все циклы в графе, и каждая пара вершин в цикле будет иметь два пути между ними. В ориентированном графе цикл является односторонним, поэтому мы не можем предполагать двойной путь между элементами цикла.
a, b
в сильно связном графе существует хотя бы один путь изa
вb
и хотя бы один путь изb
вa
. Поэтому, если нет дополнительных ограничений на типы путей, которые вы ищете, ответом будут все пары. - person beaker   schedule 14.05.2018(a,b)
, для которых есть два пути, идущие отa
кb
- person mangusta   schedule 16.05.2018