Найдите узлы графа с минимум 2 путями между ними

У меня есть сильно связанный граф, и я хочу найти пары узлов с минимум двумя путями между ними. Можете ли вы дать мне представление об алгоритме или что-то, что я могу использовать? Спасибо.


person Claudinho18    schedule 13.05.2018    source источник
comment
По определению, для всех пар вершин a, b в сильно связном графе существует хотя бы один путь из a в b и хотя бы один путь из b в a. Поэтому, если нет дополнительных ограничений на типы путей, которые вы ищете, ответом будут все пары.   -  person beaker    schedule 14.05.2018
comment
@beaker, я думаю, он подразумевает пары (a,b), для которых есть два пути, идущие от a к b   -  person mangusta    schedule 16.05.2018


Ответы (1)


Первое, что приходит на ум, это использовать DFS следующим образом:
DFS начинается с некоторой вершины v1 и "обнаруживает" вершины одну за другой. Каждая обнаруженная вершина рекурсивно запускает свою собственную DFS и "обрабатывается" после завершения рекурсии.
Предположим, что есть два направленных пути из v1 в v2. В этом случае v2 будет «обнаружен» (посредством одного из этих двух путей, идущих от v1 к v2) и в конечном итоге «обработан». Однако рекурсия v1 еще не закончена. Поток DFS собирается достичь v2 во второй раз (на этот раз с использованием второго пути от v1 к v2), но на этот раз v2 уже находится в состоянии «обработано».
Поэтому всякий раз, когда мы сталкиваемся с «обработанным», вершина, это означает, что к ней ведет второй путь.

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

Также обратите внимание, что для неориентированных графов ситуация намного проще — нам просто нужно обнаружить все циклы в графе, и каждая пара вершин в цикле будет иметь два пути между ними. В ориентированном графе цикл является односторонним, поэтому мы не можем предполагать двойной путь между элементами цикла.

person mangusta    schedule 13.05.2018
comment
Я не уверен, что OP хочет найти все узлы с минимум двумя путями между ними. Если да, то как получить такую ​​информацию из поиска DFS? - person JohnKoch; 16.05.2018