我正在尝试使用BFS来获取循环图中两个节点之间的所有路径。 我发现BFS没有跟踪它以前的节点,所以需要添加一些其他集合来实现同样的目的。
问题是 - 我们是否应该避免使用BFS来获取节点中的所有路径 使用DFS或BFS也可以提供潜在的解决方案。
如果它在那里请为我提供相同的逻辑。
答案 0 :(得分:0)
我假设您只想找到简单的路径(没有循环),否则可能会有无限的路径。如果这不是一个要求,理论上BFS或DFS都可以工作(虽然DFS会继续探索一个周期并且永远不会找到其他更短的路径),但提升这个要求并没有多大意义。
对于BFS和DFS,每个节点都应该有一个处理过的标志,以防止循环图中无限多个路径。
请考虑以下事项:
A with children B, C
B with children C, D
C with children B, D
使用BFS,你会错过A - > C - > B - > D因为B在处理C之前已被标记为已处理。
使用DFS,这不会有问题,因为在升级备份树时应该重置已处理的标志。
您可以跟踪每个节点到目前为止的整个路径,但这不可行,因为它需要大量额外的存储空间和时间。
你可以摆脱BFS的处理标志,并在路径中的节点数>停止处理。树中的节点数,并从输出中删除所有非简单路径。