Я искал алгоритм , который поможет мне найти все возможные пути в графе. Все, что я нашел до сих пор, не полностью удовлетворение.Поиск всех возможных путей в графике
Давайте представим, что мы имеем граф (дерево), как этот:
И давайте используем некоторый алгоритм, как поиск в ширину или поиск в глубину. В ответ мы получим что-то вроде
1, 2, 4, (2), 5, (2), 6, (2), (1), 3, 7, 8, (7), 9
который, как мы проходим через это дерево, и это не то, что я ищу. Я хотел бы получить все пути, как:
1
1, 2
1, 2, 4
1, 2, 5
1, 2, 6
1, 3
1, 3, 7
1, 3, 7, 8
1, 3, 7, 9
Дело в том, что я хочу просто указать root
узел и алгоритм должен быть в состоянии предоставить мне все возможные пути любой длины.
До сих пор, простой код у меня выглядит следующим образом:
func dfs(_ graph: Graph, source: Node) -> [String] {
var nodesExplored = [source.label]
source.visited = true
for edge in source.neighbors {
if !edge.neighbor.visited {
nodesExplored += dfs(graph, source: edge.neighbor)
}
}
return nodesExplored
}
Как вы писали BFS или ДФС являются путь, с несовершеннолетним изменение обновления путей на каждом шаге и убедитесь, что вы не добавляете один и тот же путь более одного раза (вы можете использовать * Set * для накопления объектов Path). – alfasin
Ну, все пути в неориентированном или циклическом графе - это бесконечное множество. И если вы на самом деле ищете алгоритм поиска в дереве, вы, вероятно, должны явно задавать этот алгоритм в своем вопросе, а не вообще для деревьев. – Paul
@Paul эта вещь - дерево, но в моем случае возможно иметь циклы. Например, мы можем иметь границу между узлами 2 и 3. – cojoj