G和DFT的节点之间的深度优先遍历关系

Posted

技术标签:

【中文标题】G和DFT的节点之间的深度优先遍历关系【英文标题】:Depth First Traversal relationship between nodes of G and DFT 【发布时间】:2018-05-29 05:03:37 【问题描述】:

令 G 为无向图。考虑 G 的深度优先遍历,令 T 为生成的深度优先搜索树。设 u 为 G 中的一个顶点,设 v 为在遍历中访问 u 后访问的第一个新的(未访问的)顶点。以下哪项陈述总是正确的?

(A) u,v 必须是 G 中的一条边,并且 u 是 T 中 v 的后代

(B) u,v 必须是 G 中的一条边,且 v 是 u 在 T 中的后代

(C) 如果 u,v 不是 G 中的边,则 u 是 T 中的叶

(D) 如果 u,v 不是 G 中的一条边,那么 u 和 v 在 T 中必须有相同的父节点。

================================================ ============================

正确答案是(C)

但我被 (B) 困住了,我没有得到 (B) 的任何反例

【问题讨论】:

【参考方案1】:

考虑下图(实际上是一棵树)。

G := (V, E) where
V := a, u, v and E := a,u, a,v.

G 中的深度优先遍历可以首先访问a,然后是u,最后是v。在访问u 的点,v 是下一个未访问的节点。但是,u, v 不是E 的边,因此声明(B) 是错误的。

【讨论】:

v 是你的后代吗? v 是 a 的后代,对吧? @MicroLegions 是的,完全正确。 v不是u的后代,而是a的后代,但是vu之后被立即访问。 那么选项 (B) 如何为假,因为 v 不是 u 的后代,并且 G 中的 (u,v) 中没有边。至少其中一个必须为真。我的意思是,是否存在 (u,v) 是 G 中的一条边,但在 T 中 v 不是 u 的后代的情况,或者您可以证明 v 是 u 的后代,但 (u,v) 不是一条边在 G 中,这将是反例。 先生,我没有关注你,我知道 (u,v) 不是 G 中的一条边,但是 v 也不是 u 的后代。那么,我错过了什么?好的,你能举一个(C)和(D)的例子吗 选项 (B) 为假,因为 u, v 不是 G 中的边。您在评论中描述的情况不会发生。我以这样一种方式理解声明 (B),特别是它指出,如果在访问 u 之后立即访问 v,则 u, vG 的边缘;但是,通常情况并非如此。

以上是关于G和DFT的节点之间的深度优先遍历关系的主要内容,如果未能解决你的问题,请参考以下文章

让你彻底整明白图的深度优先遍历

什么是图的深度优先遍历?什么是图的广度优先遍历?

在完整树的深度优先和广度优先遍历之间转换的函数

数据结构 深度优先遍历

JS 深度优先遍历(DFS)和广度优先遍历(BFS)

Python算法系列—深度优先遍历算法