请告诉我我的证明是否正确
我们有一个连通图,V(G)中的特定顶点u 假设我们计算了以u为根的G的dfs树并获得了树T. 现在假设我们计算了以你为根的G的bfs树,我们得到了相同的树T. 证明唯一可行的方法是G = T
矛盾证明。
假设dfs树和bfs树等于T,但G不等于T.
这意味着G包含至少一个不在T中的边。
我们也知道任何这样的边缘都是周期的一部分,否则它们就会出现在T.
因此,至少有一个带有C= p1, p2, p3, p_{k}
的周期p_{k} = p1
,由G中的不同节点k>= 3
组成。
假设dfs和bfs算法将在节点p1
处遇到循环
Dfs会将以下边缘添加到其树(p1, p2)
,....,(p_{k-2}
,(p_{k-1})
,而bfs首先将边(p1,p2)
,(p1,p_{k})
添加到其中树。
我们已经看到dfs树不等于bfs树,因为bfs包含(p1,p_{k})
而dfs不包含此边缘。
这与我们假设dfs和bfs具有相同的树相矛盾,并且表明它必须是G = T的情况。
答案 0 :(得分:0)
该定理仅适用于无向图(将任何强连通圆图作为反例)。
回到无向图,有一个直观的方法,注意dfs最大化树高,而bfs最小化它。这意味着在第一个圈C
点击时,覆盖C
的子树将有所不同。
您的证明正式确定了这个想法,所以一般来说我说它没问题。
您没有指定dfs选择策略,因此存在两个小错误:
而不是(p1,p2)
,则dfs可能包含(p1,p_{k})
或根本不包含任何边()。当然,dfs永远不会包含两个边,而bfs总是会。
Dfs不一定会向k-1
添加T
个圆边。但是,它会在缩回p1
之前访问所有圆顶点,因此此时所有圆顶点都已添加到T
。因此,(p1,p_{k})
(dfs选择(p1,p2)
第一次点击p1
或(p1,p2)
(否则),不会被添加。
你可以通过证明一个小问题来形式化后者:
让(v, w)
成为dfs在步骤n
中添加的边缘(wlog假设dfs从v
移至w
),T(n)
为步骤(n
)中的部分dfs树。然后[w]
引起的子图G'
中连接组件V(G) \ V(T(n))
的所有节点将被添加到dfs树中,而(w, x)
中的另一个边E(G)
将被添加到User-Agent
加入。