是否可以使用广度优先搜索逻辑来进行拓扑排序的DAG?Cormen的解决方案使用深度优先搜索,但使用BFS会更容易吗?
原因:BFS在访问具有下一个深度值的节点之前访问特定深度的所有节点.这自然意味着如果我们做BFS,父母将被列在孩子面前.这不是我们拓扑排序所需要的吗?
Can Breadth first Search可用于查找图中顶点和强连通组件的拓扑排序吗?
如果是的话怎么做?如果不是为什么不呢?
我们通常在这些问题中使用深度优先搜索,但如果我尝试使用BFS实现会有什么问题?
这样的代码会起作用吗?
def top_bfs(start_node):
queue = [start_node]
stack = []
while not queue.empty():
node = queue.dequeue()
if not node.visited:
node.visited = True
stack.push(node)
for c in node.children:
queue.enqueue(c)
stack.reverse()
return stack
Run Code Online (Sandbox Code Playgroud) 拓扑排序可以使用 DFS(边缘反转)和队列来完成。BFS 也可以使用队列来完成。使用队列进行 BFS 时元素的存储和检索方式与使用队列进行拓扑排序时的元素存储和检索方式之间是否存在任何关系。澄清会有所帮助。谢谢。
algorithm graph directed-acyclic-graphs graph-algorithm data-structures