Skip to content

2018年 408 数据结构 第 7 题

数据结构2018年选择题2分

题目

下列选项中,不是如下有向图的拓扑序列的是( )

132456

错因

A

合法序列。可能因为看到 5 出现在 1 之后,担心"5 → 6 链没有连续走完"——但拓扑排序只要求所有前驱已出现,不要求后继紧跟。1、5 都没有前驱,谁先谁后都行;6 在 3 之后再出现也没问题,因为它的前驱只有 5,5 早已出现过。

B

合法序列。常见误判:看到 6 排在 3 前面,误以为 3 必须先于 6。其实 3 和 6 之间没有边,互不依赖;只要各自的前驱(3 需要 1、2;6 需要 5)都已经在序列里出现,先后都合法。

C

合法序列。5、1 同为入度 0 起点,谁先谁后无所谓;其余每个结点出现时其所有前驱也都已经出现过。能被误选通常是把"图里看上去最自然的一条 DFS/BFS 路径"才认作合法序列,但拓扑序的可行解不唯一,所有满足"前驱在前"的排列都算合法。

总解析

判定准则:序列每读到一个结点 的所有前驱都必须已经在序列前面出现过。等价地说,把这个序列从左往右扫,每遇到一个结点就把它"出图"(删除它的所有出边),过程中不能出现"要出的结点入度还不为 0"。

先把图的依赖关系列清楚(边方向 = 依赖方向):

结点入度前驱集合
10
50
22
61
32
43

只有 1 和 5 没有前驱,所以拓扑序的开头必然是 1 或 5

逐选项检验(每读一个结点,确认其前驱全部已现身):

  • A 1, 5, 2, 3, 6, 4:1✓,5✓(无前驱),2 需 {1,5}✓,3 需 {1,2}✓,6 需 {5}✓,4 需 {2,3,6}✓。合法。
  • B 5, 1, 2, 6, 3, 4:5✓,1✓,2 需 {1,5}✓,6 需 {5}✓,3 需 {1,2}✓,4 需 {2,3,6}✓。合法。
  • C 5, 1, 2, 3, 6, 4:5✓,1✓,2 需 {1,5}✓,3 需 {1,2}✓,6 需 {5}✓,4 需 {2,3,6}✓。合法。
  • D 5, 2, 1, 6, 3, 4:5✓,2 需 {1,5}——但 1 还没出现,违反前驱条件。不合法 ✗。

违规的本质原因:图中存在边 1 → 2,所以任何合法拓扑序里 1 都必须排在 2 的前面。D 把 2 放到了 1 之前,等价于在 DAG 上"逆着箭头"走,必然不合法。

最终答案是 D(5, 2, 1, 6, 3, 4)

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数