注:以下习题参考 计算机网络(第八版)谢希仁 编著,数据结构与算法 王曙燕 主编。
一、计算机网络第5章 运输层(上) 习题与解答
5-01 试说明运输层在协议栈中的地位和作用。运输层的通信和网络层的通信有什么重要的区别?为什么运输层是必不可少的?
答案:
地位和作用:
-
运输层位于应用层和网络层之间,是面向通信部分的最高层,也是用户功能中的最低层
-
作用:为运行在不同主机上的应用进程提供端到端的逻辑通信服务
与网络层通信的区别:
| 对比项 | 网络层 | 运输层 |
|---|---|---|
| 通信范围 | 主机到主机 | 进程到进程 |
| 服务对象 | IP 数据报 | 应用报文 |
| 可靠性 | 不可靠(尽力而为) | TCP 提供可靠传输 |
为什么必不可少:
-
网络层只提供主机之间的通信,不区分同一主机上的不同进程
-
运输层通过端口号区分不同应用进程,实现多路复用和多路分解
5-02 网络层提供数据报或虚电路服务对上面的运输层有何影响?
答案:
-
无影响。运输层只看到网络层提供的服务接口,不关心网络层具体实现
-
如果网络层提供虚电路服务,运输层仍可使用 TCP 或 UDP
-
如果网络层提供数据报服务,运输层仍可提供可靠传输(TCP)
-
网络层的服务方式不影响运输层端到端逻辑通信的特性
5-03 当应用程序使用面向连接的 TCP 和无连接的 IP 时,这种传输是面向连接的还是无连接的?
答案:
面向连接的。
原因:
-
面向连接/无连接是运输层服务的特点,不是网络层的
-
TCP 在运输层提供面向连接的可靠传输服务,即使下层 IP 是无连接的
-
应用程序只看到 TCP 提供的可靠字节流服务
5-04 试画图解释运输层的复用。画图说明多个运输用户复用到一条运输连接上,而这条运输连接又复用到 IP 数据报上。
答案:
运输层复用/分解示意图:
应用层: HTTP FTP SMTP
↓ ↓ ↓
运输层: 端口80 端口21 端口25
↓ ↓ ↓
TCP 连接(复用)
↓
网络层: IP 数据报(复用)
↓
数据链路层: 帧
-
运输层复用:多个应用进程使用不同端口号,共享同一个运输层协议(TCP/UDP)
-
网络层复用:多个运输层报文段封装到 IP 数据报中,共享网络层服务
5-05 试举例说明有些应用程序愿意采用不可靠的 UDP,而不愿意采用可靠的 TCP。
答案:
| 应用类型 | 举例 | 使用 UDP 的原因 |
|---|---|---|
| 实时音视频 | VoIP、视频会议 | 容忍少量丢包,但要求低时延;TCP 重传会增加时延 |
| 流媒体直播 | 网络直播 | 实时性要求高于可靠性 |
| DNS | 域名解析 | 一次查询一次响应,开销小,重传由应用层处理 |
| SNMP | 网络管理 | 简单、开销小,丢失可重传 |
| 游戏 | 在线游戏 | 实时性要求高,偶尔丢包可接受 |
5-06 接收方收到有差错的 UDP 用户数据报时应如何处理?
答案:
直接丢弃,不发送任何通知。
原因:
-
UDP 首部有检验和,但只做差错检测
-
UDP 不提供差错恢复机制
-
丢弃后不通知发送方,由上层应用自行处理(如超时重传)
5-07 如果应用程序愿意使用 UDP 完成可靠传输,这可能吗?请说明理由。
答案:
可能。
理由:
-
UDP 只提供不可靠传输,但可靠传输可以在应用层实现
-
应用程序可以在 UDP 之上添加确认、重传、序号、超时等机制
-
例如:TFTP(简单文件传输协议)在 UDP 之上实现可靠传输
代价:应用层需要自己处理可靠性问题,增加开发复杂度。
5-08 为什么说 UDP 是面向报文的,而 TCP 是面向字节流的?
答案:
| 协议 | 特点 | 说明 |
|---|---|---|
| UDP | 面向报文 | 应用程序交给 UDP 多大的报文,UDP 就原样发送,不合并也不拆分;接收方一次取一个完整报文 |
| TCP | 面向字节流 | TCP 将应用层数据视为连续的字节流,不保留报文边界;发送方可拆分合并,接收方不知一次写了多少 |
例:发送方写 4 次 100 字节:
-
UDP:接收方读 4 次,每次 100 字节
-
TCP:接收方可能读 1 次 400 字节,或分多次读
5-09 端口的作用是什么?为什么端口号要划分为三种?
答案:
端口的作用:
-
标识主机中的不同应用进程
-
实现运输层的多路复用和多路分解
三种端口号划分:
| 类别 | 范围 | 说明 |
|---|---|---|
| 熟知端口 | 0 ~ 1023 | 分配给标准服务(HTTP:80, FTP:21, DNS:53) |
| 登记端口 | 1024 ~ 49151 | 需向 IANA 登记,供用户进程使用 |
| 动态/私有端口 | 49152 ~ 65535 | 临时分配,客户进程使用 |
划分原因:便于标准化、避免冲突、满足不同应用需求。
5-10 试说明运输层中伪首部的作用。
答案:
伪首部的作用:
-
用于计算 UDP 或 TCP 的检验和
-
它不是运输层报文段的真正首部,只在计算检验和时临时添加
-
包含 IP 首部中的关键字段:源 IP 地址、目的 IP 地址、协议号、UDP/TCP 长度
作用:验证数据报是否已正确到达目的主机(检查 IP 地址是否匹配),增强端到端校验的可靠性。
5-11 某个应用进程使用运输层的用户数据报 UDP,然后继续向下交给 IP 层后,又封装成 IP 数据报。既然都是数据报,是否可以跳过 UDP 而直接交给 IP 层?哪些功能 UDP 提供了但 IP 没有提供?
答案:
不可以跳过 UDP。
UDP 提供但 IP 未提供的功能:
-
端口号:区分同一主机上的不同应用进程
-
进程到进程的通信:IP 只提供主机到主机
-
检验和:UDP 检验和覆盖数据部分,IP 只检验首部
-
应用层数据边界:UDP 保留报文边界
5-12 一个应用程序用 UDP,到了 IP 层把数据报再划分为 4 个数据报片发送出去。结果前两个数据报片丢失,后两个到达目的站。过了一段时间应用程序重传 UDP,而 IP 层仍然划分为 4 个数据报片来传送。结果这次前两个到达目的站而后两个丢失。试问:在目的站能否将这两次传输的 4 个数据报片组装为完整的数据报?假定目的站第一次收到的后两个数据报片仍然保存在目的站的缓存中。
答案:
不能。
原因:
-
IP 数据报片属于不同的 IP 数据报(标识字段不同)
-
重传的 UDP 数据报封装成新的 IP 数据报,其标识字段与第一次不同
-
接收方只能将具有相同标识字段的数据报片组装在一起
-
两次传输的片不能混合组装
5-13 一个 UDP 用户数据报的数据字段为 8192 字节。在链路层要使用以太网来传送。试问应当划分为几个 IP 数据报片?说明每一个 IP 数据报片的数据字段长度和片偏移字段的值。
答案:
-
UDP 数据报总长 = 8192 + 8 = 8200 字节
-
IP 首部 20 字节,MTU = 1500 字节
-
每片最大数据长度 = 1500 - 20 = 1480 字节
分片计算:
-
数据部分总长 8200 - 8?注意:UDP 数据报是 IP 数据报的数据部分
-
IP 数据报总长 = 8(UDP首部)+ 8192 = 8200
-
IP 数据报数据部分 = 8200 - 20 = 8180?不对,UDP 首部也是数据
准确计算:
-
IP 数据报总长 = 20(IP首部)+ 8(UDP首部)+ 8192 = 8220 字节
-
数据部分(含 UDP 首部)需要分片
分片数 = ceil(8200 / 1480) = 6 片
| 片 | 数据长度(含UDP首部) | 片偏移(/8) | MF |
|---|---|---|---|
| 1 | 1480 | 0 | 1 |
| 2 | 1480 | 185 | 1 |
| 3 | 1480 | 370 | 1 |
| 4 | 1480 | 555 | 1 |
| 5 | 1480 | 740 | 1 |
| 6 | 800 | 925 | 0 |
5-14 一个 UDP 用户数据报的首部的十六进制表示是:06 32 00 45 00 1C E2 17。试求源端口、目的端口、用户数据报的总长度、数据部分长度。这个用户数据报是从客户发送给服务器还是从服务器发送给客户?使用 UDP 的这个服务器程序是什么?
答案:
UDP 首部各字段(每字段 2 字节):
-
源端口:06 32 = 6×256 + 50 = 1586
-
目的端口:00 45 = 0×256 + 69 = 69(TFTP 服务)
-
总长度:00 1C = 0×256 + 28 = 28 字节
-
检验和:E2 17
数据部分长度 = 总长度 - 8 = 28 - 8 = 20 字节
源端口 1586(临时端口),目的端口 69(TFTP) → 从客户端发送给服务器。
5-15 使用TCP对实时话音数据的传输会有什么问题?使用UDP在传送数据文件时会有什么问题?
(1)使用 TCP 对实时话音数据的传输会有什么问题?
答案:
TCP 虽然提供可靠传输,但并不适合实时话音数据,主要原因如下:
-
重传导致时延不可控
-
话音对实时性要求极高(端到端时延应 < 200 ms,否则体验明显下降)。
-
TCP 检测到丢包后会自动重传,重传会造成额外时延,严重时可能使语音断续或不可用。
-
-
拥塞控制会主动降低发送速率
-
TCP 有拥塞控制机制,当网络出现拥塞时会主动减小发送窗口。
-
话音编码通常以恒定速率产生数据,降低速率会直接导致话音卡顿、失真。
-
-
面向字节流,不保序/可合并
-
话音一般用小数据报(几十到上百字节)发送,TCP 可能会合并多个话音块,即使设置了
TCP_NODELAY效果也有限。 -
这会导致播放延迟增加 或解码错误。
-
-
三次握手和四次挥手增加建立/释放开销
- 话音往往是短暂、频繁的通信,TCP 的连接建立与拆除额外开销较大。
结论:实时话音一般使用 UDP + 应用层适量前向纠错(FEC)或丢包隐藏(PLC),而不是 TCP。
(2)使用 UDP 在传送数据文件时会有什么问题?
答案:
UDP 提供不可靠传输,直接传输文件会面临以下问题:
-
丢包无法恢复
- UDP 不保证数据交付,文件传输中一旦丢包,该部分数据永久丢失,文件无法完整恢复。
-
没有拥塞控制,可能加剧网络拥塞
- UDP 会不顾网络拥塞继续以原速率发送,容易使网络更加拥塞,丢包率进一步提高。
-
无序到达
- 文件要求数据按字节顺序正确组装,UDP 分组可能乱序,应用层需要额外处理排序。
-
无流量控制,容易接收方被压垮
- UDP 没有端到端的流量控制,发送过快可能导致接收方缓冲区溢出而丢弃分组。
结论 :文件传输通常需要可靠、按序、无差错的交付,一般使用 TCP。如果确实要基于 UDP 传输文件,则必须应用层实现确认、重传、窗口、排序等机制(例如 TFTP、QUIC 早期版本)。
5-16 在停止等待协议中如果不使用编号是否可行?为什么?
答案:
不可行。
原因:
-
无法区分重复分组
-
当确认丢失导致重传时,接收方无法判断是新分组还是旧分组副本
-
编号是实现可靠传输的基础
5-17 在停止等待协议中,收到重复的报文时不予理睬(即悄悄地丢弃它而其他什么也不做)是否可行?试举出具体例子说明理由。
答案(根据图片5-18答案推导):
可行。
因为停止等待协议中,发送方每发送一个分组后等待确认,收到确认才发下一个。接收方丢弃重复分组后,发送方超时重传,最终仍能正确交付。
5-18 假定在运输层使用停止等待协议。发送方发送报文段 M₀ 后在设定的时间内未收到确认,于是重传 M₀,但 M₀ 又迟迟不能到达接收方。不久,发送方收到了收到的 M₀ 的确认,于是发送下一个报文段 M₁,不久就收到了对 M₁ 的确认。接着发送方发送新的报文段 M₀,但这个新的 M₀ 在传送过程中丢失了。正巧,一开始就滞留在网络中的 M₀ 现在到达接收方。接收方无法分辨 M₀ 是旧的。于是收下 M₀,并发送确认。显然,接收方后来收到的 M₀ 是重复的,协议失败了。试画出类似于图 5-9 所示的双方交换报文的过程。
答案:

5-19 试证明:当用 n 比特进行分组编号时,若接收窗口等于 1(即只能按序接收分组),则仅在发送窗口不超过 2ⁿ - 1 时,连续 ARQ 协议才能正确运行。
答案:
证明要点:
-
序号空间大小 = 2ⁿ
-
接收窗口 = 1,只能按序接收
-
若发送窗口 > 2ⁿ - 1,可能出现序号混淆
-
当发送窗口 = 2ⁿ 时,若所有确认丢失,发送方重传序号 0~2ⁿ-1,接收方无法区分新旧
-
所以发送窗口 ≤ 2ⁿ - 1

5-20 在连续 ARQ 协议中,若发送窗口等于 7,则发送端在开始时可能连续发送 7 个分组。因此,在每一组发出后,都要置一个超时计时器。现在计算机里只有一个硬件时钟。设这 7 个分组发出的时间分别为 t₀, t₁, ..., t₆,且 t_out 都一样大。试问如何实现这 7 个超时计时器(这叫软时钟法)?
答案:
软时钟法实现:
-
维护一个计时器链表 或最小堆
-
每个发送分组记录其超时时间 = 发送时间 + t_out
-
硬件时钟定期中断,检查当前时间是否 ≥ 最小超时时间
-
若超时,触发超时处理,并检查下一个
-
只需一个硬件时钟中断源

5-21 假定使用连续 ARQ 协议,发送窗口大小是 3,而序号范围是 [0, 15],而传输媒体保证在接收方能按序收到分组。在某一时刻,在接收方,下一个期望收到的序号是 5。试问:
(1) 在发送方的发送窗口中可能出现的序号组合有哪些?
(2) 接收方已经发送出的、但仍滞留在网络中(即还未到达发送方)的确认分组可能有哪些?说明这些确认分组是用来确认哪些序号的分组。
答案:
(1) 接收方期望收到 5,说明已收到 0~4,发送窗口覆盖 5~7。可能组合:
-
{5,6,7}(正常)
-
{5,6}(7未发或确认丢失)
-
{5}(6,7未发)
-
{5,6,7,...} 但窗口大小为3,所以是连续的部分
(2) 滞留在网络中的确认可能是对 0,1,2,3,4 的确认(这些已到达,确认可能还在路上)
5-22 主机 A 向主机 B 发送一个很长的文件,其长度为 L 字节。假定 TCP 使用的 MSS 为 1460 字节。
(1) 在 TCP 的序号不重复使用的条件下,L 的最大值是多少?
(2) 假定使用上面计算出的文件长度,而运输层、网络层和数据链路层所用的首部开销共 66 字节,链路的数据率为 10 Mbit/s,试求这个文件所需的最短发送时间。
答案:
(1) TCP 序号 32 位,范围 0 ~ 2³²-1 = 4294967296
每个序号对应 1 字节,L 最大值 = 4 GB(4294967296 字节)
(2)
-
每个报文段开销 = 66 字节
-
有效数据 / 总数据 = 1460 / (1460+66) = 1460/1526 ≈ 0.9568
-
总传输字节 = L / 0.9568 ≈ 4.49×10⁹ 字节
-
比特数 = 4.49×10⁹ × 8 = 3.592×10¹⁰ bit
-
时间 = 3.592×10¹⁰ / 10⁷ = 3592 秒 ≈ 1 小时
5-23 主机 A 向主机 B 连续发送了两个 TCP 报文段,其序号分别是 70 和 100。试问:
(1) 第一个报文段携带了多少字节的数据?
(2) 主机 B 收到第一个报文段后返回的确认中的确认号应当是多少?
(3) 如果主机 B 收到第二个报文段后返回的确认中的确认号是 180,试问 A 发送的第二个报文段中的数据有多少字节?
(4) 如果 A 发送的第一个报文段丢失了,但第二个报文段到达了 B。B 在第二个报文段到达后向 A 发送确认。试问这个确认号应为多少?
答案:
(1) 第一个报文段数据长度 = 100 - 70 = 30 字节
(2) 确认号应为下一个期望字节序号 = 70 + 30 = 100
(3) 第二个报文段数据长度 = 180 - 100 = 80 字节
(4) 第一个丢失,第二个到达,B 仍期望收到第一个报文段的数据,确认号 = 70
5-24 一个 TCP 连接下面使用 256 kbit/s 的链路,其端到端时延为 128 ms。经测试,发现吞吐量只有 120 kbit/s。试问发送窗口 W 是多少?
答案:
设发送窗口 =W (bit)。发送端连续发送完窗口内的数据所需的时间=T。
有两种情况。
(a)接收端在收完一批数据的最后才发出确认,因此发送端经过(256 ms+7)后才能发送下一个窗口的数据。
(b)接收端每收到一个很小的报文段后就发回确认,因此发送端经过比256 ms 略多一些的时间即可再发送数据。因此每经过 256ms就能发送一个窗口的数据。

对于(a):
W=57825.88 bit,约为7228 字节
对于(b):
根据 RTT 和吞吐量公式:
-
RTT = 128×2 = 256 ms(假设单向时延×2)
-
最大吞吐量 = 发送窗口 / RTT
120 × 10³ = W / 0.256 → W = 120×10³ × 0.256 = 30720 bit = 3840 字节
5-25 为什么在 TCP 首部中要把 TCP 的端口号放入最开始的 4 个字节?
答案:
原因:
-
快速分解:路由器或主机接收 IP 数据报后,需要快速知道交给哪个运输层进程
-
便于硬件处理:端口号放在最前面,可在 DMA 或硬件加速中直接提取
-
与伪首部对齐:伪首部中的源/目的 IP 地址后紧接着就是源/目的端口,便于检验和计算
-
提高效率:避免解析整个首部才能获得端口信息
二、数据结构 图(上) 习题与解答
一、单项选择题
(1) 一个具有 n 个顶点和 e 条边的有向图,如果该图采用邻接矩阵来存储,则删除与顶点 Vᵢ 相关联的所有边的时间复杂度是______。
A. O(n)
B. O(e)
C. O(n+e)
D. O(n²)
答案:A
解析:邻接矩阵中,删除与顶点 Vᵢ 相关联的边需要遍历第 i 行和第 i 列,共 2n 次操作,时间复杂度 O(n)。
(2) 下面______算法可以求出无向图中的所有连通分量。
A. 广度优先遍历
B. 拓扑排序
C. 求最短路径
D. 求关键路径
答案:A
解析:从每个未访问顶点出发进行 BFS 或 DFS,即可找出所有连通分量。
(3) 一个具有 n 个顶点和 e 条边的有向图,如果该图采用逆邻接表来存储,则删除与顶点 Vᵢ 相关联的所有边的时间复杂度是______。
A. O(n)
B. O(e)
C. O(n+e)
D. O(n²)
答案:B
解析:逆邻接表中,删除与 Vᵢ 关联的边需要遍历整个表找到所有指向 Vᵢ 的边,时间复杂度 O(e)。
(4) 用 DFS 遍历一个无环有向图,并在 DFS 退栈时打印相应的顶点,则输出的顶点序列是______。
A. 逆拓扑有序
B. 拓扑有序
C. 无序的
D. 无规律可循
答案:A
解析:DFS 退栈时顶点已无后继未访问,输出序列是拓扑排序的逆序。
(5) 已知有向图 G = (V, E),其中 V = {V₁, V₂, V₃, V₄, V₅, V₆, V₇},E = {<V₁,V₂>, <V₁,V₃>, <V₁,V₄>, <V₂,V₅>, <V₃,V₅>, <V₄,V₆>, <V₅,V₇>, <V₆,V₇>}。G 的拓扑序列是______。
A. V₁, V₃, V₄, V₆, V₂, V₅, V₇
B. V₁, V₃, V₂, V₆, V₄, V₅, V₇
C. V₁, V₃, V₄, V₅, V₂, V₆, V₇
D. V₁, V₂, V₅, V₃, V₄, V₆, V₇
答案:A
解析:V₁ 入度为 0 最先输出,删除后 V₂、V₃、V₄ 入度变 0,按选项顺序验证得 A 正确。
(6) 下列有关拓扑排序的说法中错误的是______。
A. 拓扑排序成功仅限于有向无环图
B. 任何有向无环图的顶点都可以排到拓扑有序序列里,而且拓扑序列不唯一
C. 在拓扑排序序列中任意两个相继排列的顶点 vᵢ 和 vⱼ,在有向无环图中都存在从 vᵢ 到 vⱼ 的路径
D. 若有向图的邻接矩阵中对角线以下元素均为零,则该图的拓扑排序序列必定存在
答案:C
解析:拓扑序列中相邻顶点不一定有直接路径。
(7) 若一个有向图中的部分顶点不能排成一个拓扑序列,则可断定该有向图______。
A. 含有多个出度为 0 的顶点
B. 是个强连通图
C. 含有多个入度为 0 的顶点
D. 含有数目大于等于 1 的强连通分量
答案:D
解析:存在环(强连通分量)时无法拓扑排序。
(8) 无向图 G = (V, E) 和 G' = (V', E'),如 G' 是 G 的生成树,则下面说法不正确的是______。
A. G' 为 G 的连通分量
B. G' 为 G 的极小连通子图且 V' = V
C. G' 为 G 的子图
D. G' 为 G 的极大连通子图且 V' = V
答案:D
解析:生成树是极小连通子图,不是极大连通子图(极大连通子图是连通分量)。
(9) 在求最短路径的算法中,要求所有边上的权值都不为负值的算法是______。
A. Kruskal 算法
B. Dijkstra 算法
C. Floyd 算法
D. Prim 算法
答案:B
解析:Dijkstra 算法要求边权非负。
(10) 下面说法正确的是______。
① AOE-网工程工期为关键活动上的权值和之和
② 在关键路径上的活动都是关键活动,而关键活动也必然在关键路径上
A. ①②
B. ②③
C. ①③
D. ①②③
答案:A
解析:①正确,工期是关键路径长度;②正确;③与②重复。
(11) 已知某无向网的邻接矩阵如下,下列说法中错误的是______。

A. 从顶点 A 出发深度优先遍历序列为 ABCFDEC
B. 从顶点 E 出发广度优先遍历序列为 EACFBDG
C. 从顶点 A 出发广度优先遍历序列为 ABGCEDF
D. 最小生成树的边集为 (A,C), (A,D), (B,C), (D,F), (E,C), (G,F)
答案:A
解析:A 选项序列不正确。
(12) 无向图 G = (V, E),V = {a,b,c,d,e,f},E = {(a,b),(a,c),(a,e),(b,e),(c,f),(d,f),(e,d)}。对该图进行深度优先遍历,得到的顶点序列正确的是______。
A. a,b,e,c,d,f
B. a,c,f,e,b,d
C. a,e,b,c,f,d
D. a,e,d,f,c,b
答案:D
解析:从 a 出发,按邻接点顺序遍历可得 D。
(13) 下面______算法可以判断出一个有向图中是否存在环。
A. 广度优先遍历
B. 拓扑排序
C. 求最短路径
D. 求关键路径
答案:B
解析:拓扑排序成功则无环,失败则有环。
(14) 下面关于求关键路径的说法不正确的是______。
A. 求关键路径是以拓扑排序为基础的
B. 一个事件的最早开始时间与该事件为尾的弧的活动最早开始时间相同
C. 一个事件的最迟开始时间为该事件为尾的弧的活动最迟开始时间与该活动的持续时间相等
D. 关键活动一定位于关键路径上
答案:C
解析:C 选项表述有误。
(15) 对于如图 7-36 所示的事件结构网络,求出它的关键活动是______。

A. a₁ a₃ a₄ a₅ B. a₁ a₂ a₄ a₅ C. a₁ a₂ a₃ a₄ D. a₂ a₃ a₄ a₅
答案:B
(16) 下列选项中全部属于求最小生成树算法的是______。
① 普里姆(Prim)算法 ② 克鲁斯卡尔(Kruskal)算法 ③ 迪杰斯特拉(Dijkstra)算法 ④ 弗洛伊德(Floyd)算法
A. ①②
B. ①③
C. ②④
D. ③④
答案:A
(17) 在有向图 G 的拓扑序列中,若顶点 Vᵢ 在顶点 Vⱼ 之前,在下列情形不可能出现的是______。
A. G 中有弧 <Vᵢ, Vⱼ>
B. G 中有一条从 Vᵢ 到 Vⱼ 的路径
C. G 中没有弧 <Vᵢ, Vⱼ>
D. G 中有一条从 Vⱼ 到 Vᵢ 的路径
答案:D
解析:若 Vⱼ 到 Vᵢ 有路径,则 Vⱼ 应在 Vᵢ 之前,矛盾。
(18) 图中有关路径的定义是______。
A. 由顶点和相邻顶点序偶构成的边所形成的序列
B. 由不同顶点形成的序列
C. 由不同边形成的序列
D. 上述定义都不对
答案:A
二、填空题
(1) 若一个有 N 个顶点、K 条边的无向图是一个森林 (N > K),则该森林中必有( N - K) 棵树。
(2) 在图用邻接表存储时,求最小生成树的 Prim 算法的时间复杂度为 ( O(n²))。
(3) 在一个有 n 个顶点的无向网中,有 O(n^1.5 log₂ n) 条边,则应该选用 ( Kruskal ) 算法来求这个网的最小生成树,从而使计算时间减少。
(4) 用邻接矩阵 A 表示图,判定任意两个顶点 Vᵢ 和 Vⱼ 之间是否有长度为 m 的路径相连,则只要检查 ( Aᵐ) 的第 i 行第 j 列的元素是否为 0 即可。
(5) 关键路径是事件结点网络中 ( 从源点到汇点的最长路径)。
(6) 图 G 是一个非连通无向图,共有 28 条边,则该图至少有 ( 9) 个顶点。
(7) 若一个有向图具有拓扑排序序列,那么它的邻接矩阵必定为 ( 三角矩阵(不一定) )。
(8) 求解最短路径的 Floyd 算法的时间复杂度为 ( O(n³))。
(9) 采用邻接表存储图的深度优先遍历算法类似于二叉树的 ( 先序遍历)。
注:以上习题解答的理解和计算,如果有任何错误,希望各位读者和大佬指出改正,非常感谢!!!