algorithm – 使用bfs的拓扑顺序

在Sedgewick和Wayne中发现了以下关于
java中算法的问题:

4.2.19拓扑排序和BFS.解释为什么以下算法不一定产生拓扑顺序:运行BFS,并通过增加到各自源的距离来标记顶点.

我试图证明它找到了一个反例.但是,每次我尝试,我都会得到一个拓扑命令.
我的意思是,我不明白为什么这不起作用:如果顶点的来源在它之前,为什么我们没有拓扑顺序呢?

我想要证明这一点,我们需要找到一个它之前来源的顶点,但我不能.

有人有反例吗?提前致谢!

PS:这不是功课

@Edit:我已经尝试过像1 < – 2 < – 0 < – 3 < – 4这样的哈密顿路径,它给出了0 3 4 2 1,但改变0 3和4的位置给了我一个拓扑订单(但是,按照我获得的顺序,它不是).那时我不确定这是否是一个拓扑秩序.

最佳答案 您不能使用BFS,因为具有较高排名的节点可能具有较低排名的事件边缘.这是一个例子:

假设您在源(A)处启动BFS.

使用您提出的算法,节点D将位于节点C之前,这显然不是拓扑顺序.你真的必须使用DFS.

点赞