问题如下:
我们知道图形可能有很多可能的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开始。
提前致谢!
答案 0 :(得分:1)
DFS没有唯一确定结果标签的事实是由于没有访问节点子节点的顺序。据我了解,检查给定图T
的树G
是否为DFS树可以按如下方式完成。
找到T
中具有最小标签的节点;这将是当前节点v
,此时此节点是启动DFS搜索的根。将v
标记为已访问。
递归处理v
中G
的未访问子女。如果这些与T
中的不同,则T
不是G
的DFS树。如果它们相同,则按T
中的DFS编号的升序处理它们,像往常一样分配DFS编号并标记访问节点。只要分配的DFS编号与T
中的DFS编号不匹配,树T
就不能是G
的DFS树。另一方面,如果可以分配所有DFS编号以匹配T
中的编号,我们已经建设性地证明T
是G
的DFS树。