确定树是否为DFS树

时间:2017-04-24 14:38:39

标签: algorithm tree

问题如下:

  

我们知道图形可能有很多可能的DFS树,具体取决于起始顶点和   我们探索每个顶点的邻居的顺序   给定连通图G =(V,E),给出一个有根树T,使得该树的每个边都是   目前在E.设计一种有效的算法来确定T是否是G的DFS树。

“树T不是DFS树”是什么意思(假设它跨越整个图形)?

如果我没有在邻接列表表示中对树顶点进行任何排序(我认为问题本身就是主张),我可以以任何方式遍历并创建问题中给出的树。

编辑:我想我开始了解一个“非DFS树T”,它只是跨越但不可能在任何可能的DFS中创建的树,因为我们有一个限制,必须访问所有孩子首先在DFS树中返回父级之前。不过,任何人都可以帮助高效的Algo。

例如:

A - B
/ \
   C - D

此图表的树T为:
A - B
/ \
   C D

但这不是有效的DFS树! DFS从顶点A开始。

提前致谢!

1 个答案:

答案 0 :(得分:1)

DFS没有唯一确定结果标签的事实是由于没有访问节点子节点的顺序。据我了解,检查给定图T的树G是否为DFS树可以按如下方式完成。

找到T中具有最小标签的节点;这将是当前节点v,此时此节点是启动DFS搜索的根。将v标记为已访问。

递归处理vG的未访问子女。如果这些与T中的不同,则T不是G的DFS树。如果它们相同,则按T中的DFS编号的升序处理它们,像往常一样分配DFS编号并标记访问节点。只要分配的DFS编号与T中的DFS编号不匹配,树T就不能是G的DFS树。另一方面,如果可以分配所有DFS编号以匹配T中的编号,我们已经建设性地证明TG的DFS树。