通过率 54% · 提交 703 · 通过 382
小慕正在开发一个疫情精准防控系统。为了避免全员核酸检测带来的资源浪费,系统需要根据流调数据和大数据分析,精准找出可能被感染的人群。现在,系统已经获取了每个人之间在时间、空间上是否存在轨迹交叉的信息。 给定一组确诊病例的编号(X1, X2, X3, ..., n),小慕需要从所有人中找出哪些人需要进行核酸检测,并输出需要进行核酸检测的人数。(注意:确诊病例自身不需要再做核酸检测) 需要进行核酸检测的人,是,即有可能通过确诊病例所能传播到的所有人。 例如:A是确诊病例,A和B有接触、B和C有接触、C和D有接触、D和E有接触,那么B、C、D、E都是需要进行核酸检测的人。
这类题属于华为 OD 机考真题方向中「100分 / DFS」方向的高频题型,通常考察对「100分 / DFS」的建模能力与边界条件处理。掌握本题的解题思路后,可举一反三应对同类真题方向,稳步提升机考通过率。
提示:带虚线的词点一下有通俗解释。
第一行为总人数N
第二行为确诊病例人员编号(确诊病例人员数量<N),用逗号分割
第三行开始,为一个N*N的矩阵,表示每个人员之间是否有接触,0表示没有接触,1表示有接触。
整数:需要做核酸检测的人数
示例 1
输入示例
5 1,2 1,1,0,1,0 1,1,0,0,0 0,0,1,0,1 1,0,0,1,0 0,0,1,0,1
输出示例
3
时间限制 1000 ms · 内存限制 128 MB
本平台为独立第三方培训机构,与华为技术有限公司无任何关联;课程的服务内容与权益以购买协议为准,学习效果因个人情况而异。「华为 OD」「华为可信」等仅为对岗位与考试方向的客观描述,相关商标归各自权利人所有。
相关图解步骤
先看指定步骤补关键知识点,再回到本题完成标准输入输出。
本题让人回想那段岁月..恍若隔世
非常典型的搜索问题,很容易想到直接套用 DFS / BFS 模板来完成。
注意所给的无向图是以关联矩阵 mat 来呈现的,即 mat[i][j] == 1 表示 i 和 j 有关联(有接触)。
另外,需要注意进行搜索的初始节点可能有多个。若:
注意:本题存在一个非常坑的地方,就是原本已经确诊的人是无需再做核酸检测的,只有连通块中的其他人才需要做检测。
如果不熟悉关联矩阵,也可以将关联矩阵转化为邻接表来表示。
复习一下无向图关联矩阵的特点:
mat[i][j] == 1 表示 i 和 j 关联,mat[i][j] == 0 表示 i 和 j 无关mat[i][i] == 1 恒成立,因为每一个人总和自己关联mat[i][j] == mat[j][i],因为 i 和 j 关联等价于 j 和 i 关联复杂度分析 设 n 为总人数,即关联矩阵的边长。
边界与注意事项
登录后可查看你在本题的历史提交,以及每次的各用例通过情况。
© 2026 广州慕课网络科技有限公司 · 吴师兄学算法官网 版权所有