首先......这是问题......
举例说明有向图G =(V,E),V中的源顶点s和E中包含的一组树边F,这样对于V中包含的每个顶点,唯一的简单路径从s到v的图(V,F)是G中的最短路径,但无论在每个邻接列表中如何排序顶点,都不能通过在G上运行BFS来产生边集F。
现在......因为这是一个家庭作业,我不想要一个直截了当的答案,但更多的想法看待/尝试。但是,这就是我到目前为止所想到的......
我基本上认为我可以创建一个图表,它有几条到达特定顶点的最短路径。当然,其中一条路径可以在BFS中找到。但是,我可以使用其中一条替代路线来装入F.然而,让我失望的部分是“无论顶点是如何排序的”......我不知道如何将其包含在我的脑中处理。我已经尝试过循环,各种不同的定向流,还没有。
还有其他想法吗?
答案 0 :(得分:2)
3
s ---- x
| /
1| / 1
| /
| /
y
如果上图没有显示
假设
E = {((s,x):3),((s,y):1),((y,x):1)}
其中两元组是有序附加的权重对。
边集F = { (s, y), (y, x) }
包含图的所有顶点。此外,它从s到x包含的唯一简单路径是图中从s到x的最短路径。但是,BFS永远不会找到F.
从s开始,将发现x和y并标记为灰色。 然后,当探索y时,它只会找到另一个灰色顶点,即x,而不是在生成的广度优先树中将其作为后代添加。
答案 1 :(得分:1)
我不确定您是否只是找到一个反例,或者找到在任何给定图上运行的算法。找到一个反例并不是很困难,例如,
0 / \ 1 2 |\ /| | x | |/ \| 3 4
源为0.边集F包含(0,1)(0,2),(1,3),(2,4)。 FFS无法生产F.
我还没有找到任何图表的通用算法,但也许上面的示例可以提供线索。
答案 2 :(得分:1)
这个问题已经过时了,但是我发布了另一个答案,因为它已被多次查看过。这是Cormen / Leiserson / Rivest / Stein算法书中的问题22-2.6,其他人可能会遇到这个问题。
上述答案假设图表已加权。如果图形被视为未加权,则BFS可以在任一响应中生成边集。问题并不是说图表是加权的,而在Cormen中它是关于未加权图形的部分。
Here是未加权情况下的解决方案。步骤是:
这是有效的,因为a和b与x和y的距离相同。如果先将x排队,那么通过BFS的路径将从x到a和b。如果先将y排队,那么通过BFS的路径将从y到a和b。在BFS中,您无法混合和匹配解决方案的方式。