Breadth First Поиск для поиска всех путей между любыми двумя узлами в циклическом графике

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

Вопрос: следует ли нам избегать использования BFS для получения всех путей в узле и   использование DFS или BFS также может дать потенциальное решение.

Если его там, пожалуйста, предоставьте мне логику для этого же.

0
nl ja de

1 ответы

Предполагаю, что вы просто хотите найти простые пути (без циклов), иначе могут быть бесконечные пути. Если это не является обязательным требованием, либо BFS, либо DFS теоретически будут работать (хотя DFS просто будет исследовать один цикл и никогда не найдет другие более короткие пути), но отмена этого требования на самом деле не имеет смысла.

С BFS и DFS вы должны иметь обработанный флаг для каждого узла, чтобы предотвратить бесконечное множество путей в циклических графах.

Рассмотрим следующее:

A with children B, C
B with children C, D
C with children B, D

With BFS, you'd miss A -> C -> B -> D because B would have been marked as processed before processing C.

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

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

You could get rid of the processed flag for BFS and stop processing when number of nodes in the path > number of nodes in the tree, and remove all non-simple paths from the output.

0
добавлено