通过率 48% · 提交 356 · 通过 172
小慕正在为一个机器人设计路径规划算法。房间由X*Y个方格组成,例如下图为6*4的大小。每个方格用坐标(x, y)表示。 机器人固定从方格(0, 0)出发,只能向东或者向北移动。 出口位于房间的最东北角,如下图的方格(5, 3)。题目保证机器人总能从入口走到出口。 房间内有些方格是墙壁,比如(4, 1),机器人无法通过。 有些方格一旦到达就无法走到出口,如图中标记为B的方格,这些被称为。 有些方格机器人根本无法到达,如图中标记为A的方格,这些被称为。注意,不可达方格不包括墙壁所在的位置。 在下面的示例图中,陷阱方格有2个,不可达方格有3个。 请帮小慕实现这个路径规划功能:给定房间大小和墙壁位置,计算出陷阱方格与不可达方格各有多少个。
这类题属于华为 OD 机考真题方向中「200分 / 2023B」方向的高频题型,通常考察对「200分 / 2023B」的建模能力与边界条件处理。掌握本题的解题思路后,可举一反三应对同类真题方向,稳步提升机考通过率。
提示:带虚线的词点一下有通俗解释。
第一行为房间的X和Y (0 < X,Y <= 1000)
第二行为房间中墙壁的个数N (0 <= N < X*Y)
接着下面会有N行墙壁的坐标
陷阱方格与不可达方格数量,两个信息在一行中输出,以一个空格隔开。(结尾不带回车换行)
示例 1
输入示例
6 4 5 0 2 1 2 2 2 4 1 5 1
输出示例
2 3
示例 2
输入示例
6 5 10 0 2 1 1 1 2 1 3 3 1 3 2 3 3 4 1 4 3 5 3
输出示例
本平台为独立第三方培训机构,与华为技术有限公司无任何关联;课程的服务内容与权益以购买协议为准,学习效果因个人情况而异。「华为 OD」「华为可信」等仅为对岗位与考试方向的客观描述,相关商标归各自权利人所有。
相关图解步骤
先看指定步骤补关键知识点,再回到本题完成标准输入输出。
本题是一道非常有意思的题目,显然路径的搜索过程可以用 DFS/BFS 来完成。问题在于如何判断方格是不可达方格和陷阱方格。
先考虑相对直观的不可达方格的判断。 我们从起点到终点进行 DFS/BFS(注意搜索方向只有向上或向右两个方向),将能够到达的方格在检查数组 check_list1 中标记为 True。搜索完成后,check_list1 中所有不为墙壁的 False 数量,即为不可达方格的数量。
显然上述做法只能够算出不可达方格的数量,因为陷阱方格在搜索过程中是可以到达的。
在判断陷阱方格之前,需要构建一个逆向路径的概念。 如果从某个点 (i, j) 出发(这个点不一定是起点),只历经向右和向上最终到达终点,那么相对应的,从终点出发也可以只历经向左和向下最终到达该点 (i, j),这条路径我们称之为原路径的逆向路径。
容易证明,如果某条路径存在,那么其逆向路径也一定存在。
陷阱方格的判断需要借助逆向路径的概念来完成。假设一个方格 (i, j) 是陷阱方格,它应该满足以下两个要求:
1. 从起点出发,能够到达 (i, j)。即从 (0, 0) 到 (i, j) 的路径存在。 2. 从 (i, j) 出发,不能够到达终点 (n-1, m-1)。即从 (i, j) 出发到终点 (n-1, m-1) 的路径不存在。
上述第一个条件其实非常容易满足。在不可达方格判断中,check_list1 中标记为 True 的点,就是从起点出发能够到达的点。
对于上述的第二个条件,我们可以用逆向路径的概念来描述: 从终点 (n-1, m-1) 出发到点 (i, j) 的逆向路径不存在。
因此对于第二个条件,我们可以从终点到起点进行逆向路径的 DFS/BFS(注意搜索方向只有向左或向下两个方向),能够到达的位置在检查数组 check_list2 中标记为 True。搜索完成后,check_list2 中所有不为墙壁的值为 False 的点,即为从终点出发的逆向路径无法到达的点。
在 check_list1 中值为 True,在 check_list2 中值为 False 的点(且不为墙壁),即是满足上述两个条件的点,也就是陷阱方格。统计满足条件的方格数量即可。
至此,本题的分析已经大体完成,我们需要做两次 DFS/BFS 搜索:
不管是 BFS 过程还是 DFS 过程,和常规的搜索过程无异。
另外,考虑到在计算 checkList 中值的时候需要排除掉墙壁,我们可以在墙壁的初始化时,就把 checkList1 和 checkList2 中墙壁所对应的点标记为 True,这样可以免去最后一步计数时的繁琐判断。
解法一:BFS
复杂度分析 设房间为 n 行 m 列(对应题面的 X * Y),墙壁数量为 W。
另外,代码在读入墙壁时就把两个 checkList 中墙壁对应的位置预先标为 true,这个小技巧既挡住了 BFS 进入墙壁,也让最后两轮计数不必再单独排除墙壁,且不增加复杂度。
登录后可查看你在本题的历史提交,以及每次的各用例通过情况。
6 4
时间限制 1000 ms · 内存限制 128 MB
© 2026 广州慕课网络科技有限公司 · 吴师兄学算法官网 版权所有