Appearance
题目
给定无向图的邻接多重表,求顶点 b、d 的度()

结构(文字版):顶点表 5 个槽位,下标 0..4 分别存 a、b、c、d、e。每条无向边只用一个边结点(邻接多重表的特点),边结点形如
[ivex | ilink | jvex | jlink],其中 ilink 指向 ivex 顶点的下一条邻边,jlink 指向 jvex 顶点的下一条邻边。从图中读出的全部边结点(7 个,对应 7 条边):
(0,1):连 a—b(0,3):连 a—d(1,3):连 b—d(2,0):连 c—a(3,2):连 d—c(4,2):连 e—c(4,3):连 e—d
错因
A
完全漏读了 b 和 d 各自的邻边链。在邻接多重表里遍历某顶点 v 的邻边时,遇到边结点要先看 v 是 ivex 还是 jvex,再决定沿 ilink 还是 jlink 继续——选 A 的人可能只沿一种链方向走(比如只走 ilink),导致大量"v 出现在 jvex 位置"的边被漏掉,结果数出来的度严重偏小。
C
把题目里的"b、d"看成了"a、c"或别的顶点。3、2 这一组数对照图里实际是顶点 a 的度和顶点 e 的度(a 连 b、c、d 共 3 条,e 连 c、d 共 2 条)。题目问的是 b 和 d,认错顶点了。
D
b 的度数对(2),但 d 的度数漏了一条。容易漏的是最右下角的 (4,3) 这个边结点——它被画在 e 那行的旁支位置,从 d 的链看过去拐弯多,粗心的人没数到它。漏掉这条 d—e 边后 d 只剩 3 条,得到了 2、3。
总解析
邻接多重表回顾:无向图里每条边在所有相关链中只存一份,边结点为 [ivex | ilink | jvex | jlink]。从顶点 v 出发遍历它的邻边链,每遇到一个边结点,先判断 v 等于 ivex 还是 jvex,再决定走哪条 link:
- v == ivex → 沿 ilink 继续
- v == jvex → 沿 jlink 继续
顶点 v 的度 = v 的邻边链上经过的边结点数(每条边只算一次)。
逐条边读出图的拓扑(从 7 个边结点):
| 边结点 | 边 |
|---|---|
| (0,1) | a—b |
| (0,3) | a—d |
| (1,3) | b—d |
| (2,0) | a—c |
| (3,2) | c—d |
| (4,2) | c—e |
| (4,3) | d—e |
对应的无向图(5 顶点 7 边):
数 b 的度:含 b 的边 = a—b、b—d ⇒ deg(b) = 2数 d 的度:含 d 的边 = a—d、b—d、c—d、d—e ⇒ deg(d) = 4
最终答案是 B(2, 4)。