校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > 数据结构 > 图的遍历
题目

用DFS遍历一个无环有向图,并在DFS算法退栈返回时打印相应的顶点,则输出的顶点序列是(  )

A.逆拓扑有序

B.拓扑有序

C.无序的

解答

正确答案是 A

DFS是一个递归算法,在遍历的过程中,先访问的点被压入栈底。拓扑有序是指如果点U到点V有一条弧,则在拓扑序列中U一定在V之前.深度优先算法搜索路径恰恰是一条弧,栈的输出是从最后一个被访问点开始输出,最后一个输出的点是第一个被访问的点.所以是逆的拓扑有序序列

C 3条回复 评论
假期

Aaaaaa

发表于 2021-02-10 23:10:33
0 0
企鹅哥哥

栈先入后出

发表于 2018-10-13 10:49:37
0 0
小茉莉

首先说下这个拓扑有序,说明这个图得到的拓扑唯一。如上面这个图的拓扑就是一个有序的。
言归正传:首先这个有向无环图的深度遍历得到的序列是不唯一的。比如从ABCD、ABDC、CBDA等这些都是这些。但是他们退栈确实相同的。A入栈然后看A有那个可以到达的访问B,然后查看B有没有哪个可以到达的访问。有D。看D还有没有哪个可以到达的访问。没有。D出站,看看B有没有哪个除了D可以访问的。没有退栈B。查看A还有没有除了B其他的访问的。有C,C入栈,看看C没有哪个除了BD可以访问的,没有退栈C,所以A还有没有除了BC可以到达的,没有退栈A。最后退栈的序列就是DBCA。同理可以验证其他几个最后退栈的序列都会DBCA。然后这个有向图的拓扑序列是ACBD。所以说这哥深度优先遍历算法中退栈次序是逆拓扑有序。

发表于 2018-10-13 10:49:27
0 0