Algorithm 确定树是否为DFS树
问题如下: 我们知道,一个图可能有许多可能的DFS树,这取决于起始顶点和起始点 我们探索每个顶点的邻域的顺序。Algorithm 确定树是否为DFS树,algorithm,tree,Algorithm,Tree,问题如下: 我们知道,一个图可能有许多可能的DFS树,这取决于起始顶点和起始点 我们探索每个顶点的邻域的顺序。 给定一个连通图G=(V,E),就得到了一个根树T,使得这棵树的每一条边都是 设计一个有效的算法来确定T是否是G的DFS树 “树T不是DFS树”(假设它跨越整个图形)的含义是什么 如果我在邻接列表表示中没有任何树顶点的排序(我假设问题本身就是这样),我可以以任何方式遍历并创建问题中给出的树 编辑:我想我知道了“非DFS树T”,它只是一个跨越但不可能在任何可能的DFS中创建的树,因为我们有
给定一个连通图G=(V,E),就得到了一个根树T,使得这棵树的每一条边都是 设计一个有效的算法来确定T是否是G的DFS树 “树T不是DFS树”(假设它跨越整个图形)的含义是什么 如果我在邻接列表表示中没有任何树顶点的排序(我假设问题本身就是这样),我可以以任何方式遍历并创建问题中给出的树 编辑:我想我知道了“非DFS树T”,它只是一个跨越但不可能在任何可能的DFS中创建的树,因为我们有一个限制,即在返回到父级之前,必须先访问DFS树中的所有子级。不过,有谁能帮助我们实现高效的算法呢 例如: A--B
/\
C-D 此图的树T为:
A--B
/\
C D 但这不是有效的DFS树
从顶点A开始的DFS
提前谢谢 DFS不能唯一地确定结果标签,这是因为节点的子节点没有访问顺序。据我所知,检查给定图形的树
T
是否为DFS树可以按如下方式进行
在T
中查找具有最小标签的节点;这将是当前节点v
,此时该节点是启动DFS搜索的根节点。将v
标记为已访问
递归处理
G
中v
的未访问子级。如果这些与T
中的不同,T
不是G
的DFS树。如果它们相同,则按其DFS编号在T
中的升序处理它们,按常规分配DFS编号并标记已访问的节点。每当分配的DFS编号与T
中的DFS编号不匹配时,树T
不能是G
的DFS树。另一方面,如果所有DFS编号都可以指定为与T
中的编号相匹配,我们已经建设性地证明T
是G
的DFS树T是深度优先搜索树(DFS),这就是它的意思。请告诉我这个问题的相关性树T不是DFS树的含义是什么
正如问题中所说的,T是G的DFS树
如果我能找出哪棵树不是,我就能找出哪棵树是。在一种特殊情况下,这将失败:a:B;B:C,D;C:D;D:C;如果我从A开始,检查树的DFS编号是:A(1),B(2),C(3),D(4)。我们无法区分给定的T树和DFS树。自:A:B;B:C,D;C:B;D:B;我猜不是DFS树。^具有相同的DFS编号T和DFS树,但我猜T不是DFS树。@Akash请更精确地描述图形和树;在您的符号A:B
中,您的意思是A
有子B
?您在评论末尾提到的图表不是一棵树,因为它包含一个循环。请参阅上述问题的编辑部分,我已经清楚地提到了它。@Akash感谢您的澄清;我忽略了这一点。