我有一个问题无法证明。能否有人提供一些关于这个问题的见解?
我们有一个连通图 G = (V,E),其中包含特定顶点u ∈ V。假设我们从u开始计算深度优先搜索树,并获得包括G所有节点的树T。假设我们然后从u开始计算广度优先搜索树,并获得相同的树T。证明G = T。(换句话说,如果T既是以u为根的深度优先搜索树,又是以u为根的广度优先搜索树,则G不能包含任何不属于T的边。)
我有一个问题无法证明。能否有人提供一些关于这个问题的见解?
我们有一个连通图 G = (V,E),其中包含特定顶点u ∈ V。假设我们从u开始计算深度优先搜索树,并获得包括G所有节点的树T。假设我们然后从u开始计算广度优先搜索树,并获得相同的树T。证明G = T。(换句话说,如果T既是以u为根的深度优先搜索树,又是以u为根的广度优先搜索树,则G不能包含任何不属于T的边。)
- 假设输入的图G是无向且连通的,但不是一棵树。
- 那么G必须包含一个环C。 假设C由k个节点v1,v2,...,vk组成,即C是环v1→v2→...→vk→v1。
- 现在,在DFS树中,节点v1,v2,...,vk将都处于从根到叶子节点的同一路径上。
- 为什么?假设vf是访问这些节点中的第一个节点。然后,其余节点必须在explore(vf)的某个时刻被访问,因为其他vi都是强连接的。
- 然而,在BFS树中,节点v1,v2,...,vk将形成至少两个分支,从第一个被访问的节点开始分支(想象一下在环上进行BFS)。因此,当且仅当输入的图是树时,BFS和DFS产生相同的树。
@dtldarek在math.stackechange提出了另一种方法:
- 如果图是简单的,连通的和无向的,则G是树当且仅当在BFS / DFS搜索中遍历了每条边。
- 假设TBFS = T = TDFS,但是存在e∈E(G)\ E(T),即未被任何算法访问的边。
- 边没有被遍历的唯一原因可能是另一侧的顶点已经被访问,但如果存在DFS回边,则BFS必须先使用它。
root
|
|
V1
|
|
V2
|
|
.
.
.
Vn
V1
/
/
Vn-----root------V2
| \
| \
V4 V3
通过语句证明
与上述两棵树不同的任何其他树都将是这样的:一个中间顶点v存在于x级别,并且它在x+1级别有多于1个孩子(比如说2个)c1和c2。BFS将访问v,然后访问c1和c2,但是DFS将访问v,然后访问c1,然后访问c1的子节点,因此明显这两种情况下的遍历方式是不同的。