通过率 52% · 提交 364 · 通过 189
小慕正在开发一个由 n 个微服务组成的系统,每个服务的启动可能存在依赖关系(有些服务可以独立启动),同时每个服务自身启动加载也需要一定时间。 给定一个 n×n 的二维矩阵 useTime,其中 表示服务 i 自身启动加载需要 10 秒,useTime[i][j] = 1 表示服务 i 启动依赖于服务 j 先启动完成,useTime[i][k] = 0 表示服务 i 启动不依赖于服务 k。其中 0 ≤ i, j, k < n。 服务之间的依赖关系不存在循环依赖(即没有环)。现在小慕希望对任意一个服务 i 进行集成测试(服务 i 自身也需要加载),请问最少需要等待多少时间才能开始测试?
这类题属于华为 OD 机考真题方向中「200分 / BFS」方向的高频题型,通常考察对「200分 / BFS」的建模能力与边界条件处理。掌握本题的解题思路后,可举一反三应对同类真题方向,稳步提升机考通过率。
提示:带虚线的词点一下有通俗解释。
第一行输入服务总量 n,之后的 n 行表示服务启动的依赖关系以及自身启动加载耗时 最后输入 k 表示计算需要等待多少时间后可以对服务 k 进行集成测试 其中 1 <= k <= n,1<=n<=100
最少需要等待多少时间(s)后可以对服务 k 进行集成测试
示例 1
输入示例
3 5 0 0 1 5 0 0 1 5 3
输出示例
15
服务3 启动依赖服务2,服务 2 启动依赖服务 1,由于服务 1,2,3 自身加载需要消耗 5s,所以 5+5+5=15,需等待 15s 后可以对服务 3 进行集成测试
示例 2
输入示例
本平台为独立第三方培训机构,与华为技术有限公司无任何关联;课程的服务内容与权益以购买协议为准,学习效果因个人情况而异。「华为 OD」「华为可信」等仅为对岗位与考试方向的客观描述,相关商标归各自权利人所有。
相关图解步骤
先看指定步骤补关键知识点,再回到本题完成标准输入输出。
本题在常规的拓扑排序问题上加多了启动时间这一个限制条件,属于变形题。
构建邻接表和入度表比较常规,直接根据关联矩阵的特点进行构建即可。
接着我们搜索所有入度为0的节点,存入队列中,作为整个拓扑循环的若干起点。
如果不考虑时间依赖的问题,本题的拓扑循环可以直接套用模板:
由于在本题中,节点之间的依赖存在时间上的差别,我们需要记录两个东西:
然后我们需要考虑两件事:
1. 每一个节点的启动时刻(注意此处尚未考虑节点自身启动所花费的时间),依赖于其所有前置节点中启动得最晚的那一个。 2. 每一个节点启动时还需要加上自身加载的时间,才是这个节点启动完毕的时刻。
所以对于整个拓扑循环过程,我们多加上两行代码即可:
最终输出节点k的启动完毕时刻:
复杂度分析 设微服务个数为 n。读入 n×n 的 useTime 矩阵并用双重循环把它转成邻接表和入度数组,这一步固定要扫描全部 n^2 个矩阵元素,是 O(n^2),也是整个算法的瓶颈。设依赖关系(边)数为 E(E 不超过 n^2),拓扑排序 BFS 中每个节点至多入队一次、每条边使入度减一并做一次 max 转移,为 O(n + E),被 O(n^2) 覆盖。总时间复杂度 O(n^2)。空间上,矩阵本身占 O(n^2),邻接表为 O(n + E),loadTimeList、totalTime、入度数组和队列均为 O(n),空间复杂度由输入矩阵主导,为 O(n^2)。
边界与注意事项
登录后可查看你在本题的历史提交,以及每次的各用例通过情况。
3 5 0 0 1 10 1 1 0 11 2
输出示例
26
服务 2 启动依赖服务 1 和服务 3,服务 3 启动需要依赖服务 1,服务 1,2,3 自身加载需要消耗 5s,10s,11s,所以 5+10+11=26,需等待 26s 后可以对服务 2 进行集成测试
示例 3
输入示例
4 2 0 0 0 0 3 0 0 1 1 4 0 1 1 1 5 4
输出示例
12
服务 3 启动依赖服务 1 和服务 2,服务 4 启动需要依赖服务 1,2,3,服务 1,2,3,4 自身加载需要消耗 2s,3s,4s,5s,所以 3+4+5=12s(因为服务 1 和服务 2 可以同时启动),需等待 12s 后可以对服务 4 进行集成测试
示例 4
输入示例
5 1 0 0 0 0 0 2 0 0 0 1 1 3 0 0 1 1 0 4 0 0 0 1 1 5 5
输出示例
11
服务 3 启动依赖服务 1 和服务 2,服务 4 启动需要依赖服务 1,2,服务 5 启动需要依赖服务 3,4,服务 1,2,3,4,5 自身加载需要消耗 1s,2s,3s,4s,5s,所以 2+4+5=11s(因为服务 1 和服务 2 可以同时启动,服务 3 和服务 4 可以同时启动),需等待 11s 后可以对服务 5 进行集成测试
时间限制 1000 ms · 内存限制 128 MB
© 2026 广州慕课网络科技有限公司 · 吴师兄学算法官网 版权所有