【发布时间】:2017-05-06 01:24:29
【问题描述】:
我正在寻找一些算法,它可以帮助我在图表中找到所有可能的路径。到目前为止,我发现的一切都完全令人满意。
让我们使用一些算法,例如广度优先搜索或深度优先搜索。作为回报,我们会得到类似
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 或 DFS 是要走的路,只需对每一步更新路径进行细微修改,并确保您不会多次添加相同的路径(您可以使用设置来累积 Path 对象)。
-
嗯,无向或循环图中的所有路径都是无限集。如果您实际上是在搜索用于在树中搜索的算法,您可能应该在问题中明确询问此类算法,而不是一般地询问树。
-
@Paul 这东西是一棵树,但在我的情况下可能有循环。例如,我们可以在节点 2 和 3 之间有边。
标签: algorithm graph-theory traversal depth-first-search breadth-first-search