创建BFS中未包含的简单路径边

时间:2011-02-24 06:04:15

标签: graph-theory graph-algorithm

首先......这是问题......

举例说明有向图G =(V,E),V中的源顶点s和E中包含的一组树边F,这样对于V中包含的每个顶点,唯一的简单路径从s到v的图(V,F)是G中的最短路径,但无论在每个邻接列表中如何排序顶点,都不能通过在G上运行BFS来产生边集F。

现在......因为这是一个家庭作业,我不想要一个直截了当的答案,但更多的想法看待/尝试。但是,这就是我到目前为止所想到的......

我基本上认为我可以创建一个图表,它有几条到达特定顶点的最短路径。当然,其中一条路径可以在BFS中找到。但是,我可以使用其中一条替代路线来装入F.然而,让我失望的部分是“无论顶点是如何排序的”......我不知道如何将其包含在我的脑中处理。我已经尝试过循环,各种不同的定向流,还没有。

还有其他想法吗?

3 个答案:

答案 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是未加权情况下的解决方案。步骤是:

  1. 从源s到2个顶点x和y的图形。 s有超出度2. x和y各自出去a和b而不是其他地方。
  2. BFS无法访问的树是从s到x,从x到a,然后从s到y,从y到b。
  3. 这是有效的,因为a和b与x和y的距离相同。如果先将x排队,那么通过BFS的路径将从x到a和b。如果先将y排队,那么通过BFS的路径将从y到a和b。在BFS中,您无法混合和匹配解决方案的方式。