通过率 40% · 提交 746 · 通过 295
小慕正在规划周末与好友的聚餐,他们通过手机在地图上标记了许多候选餐厅。 由于自然地形等原因,部分餐厅位置无法到达。 小慕想知道,他和好友都能到达的餐厅一共有多少个。
这类题属于华为 OD 机考真题方向中「200分 / DFS」方向的高频题型,通常考察对「200分 / DFS」的建模能力与边界条件处理。掌握本题的解题思路后,可举一反三应对同类真题方向,稳步提升机考通过率。
提示:带虚线的词点一下有通俗解释。
第一行输入 m 和 n,m 表示地图长度,n 表示地图宽度
第二行开始具体输入地图信息,地图信息包括
0 为通畅的道路
1 为障碍物(且仅 1 为障碍物)
2 为小华或小为,地图中必定有且仅有两个(非障碍物)
3 为被选中的聚餐地点(非障碍物)
可以两方都到达的聚餐地点的数量,行末无空格
示例 1
输入示例
4 4 2 1 0 3 0 1 2 1 0 3 0 0 0 0 0 0
输出示例
2
第一行输入地图的长宽为4和4 第二行开始为具体的地图,其中: 3 代表小华和小明的聚餐地点; 2 代表小华或小明(确保有2个); 0 代表可以通行的位置; 1 代表不可以出行的位置。 此时2者都能达到的聚餐位置有两处
时间限制 1000 ms · 内存限制 128 MB
本平台为独立第三方培训机构,与华为技术有限公司无任何关联;课程的服务内容与权益以购买协议为准,学习效果因个人情况而异。「华为 OD」「华为可信」等仅为对岗位与考试方向的客观描述,相关商标归各自权利人所有。
相关图解步骤
先看指定步骤补关键知识点,再回到本题完成标准输入输出。
本题的设问是需要寻找两个人同时可以到达的聚餐地点。
一种非常朴素的做法就是按照题目的要求进行模拟:先找到两个 2 的坐标位置,然后从这两个 2 出发进行 DFS/BFS,分别记录能够到达的 3 的位置,再取交集,交集的长度就是答案。
但这种做法显得有些冗余,因为需要分别从两个起点出发进行两次搜索,并且还涉及到取交集的操作。
由于题目中有且只有两个 2,且地图中只有 1 是障碍物。若:
因此,我们其实不需要分别从两个 2 出发做两次搜索。只需要从其中的某一个 2 出发做一次搜索即可:
1. 设置一个标记 flag 初始化为 False,表示能够遇到另一个 2。如果搜索过程中遇到了另一个 2,那么将 flag 设置为 True。 2. 在搜索的过程中记录遇到的 3 的个数 ans。 3. 退出搜索后,若:
flag = False,说明小华和小为无法相遇,可以同时到达的聚餐地点数量为 0。flag = True,说明小华和小为可以相遇,可以同时到达的聚餐地点数量为上述搜索中记录的 3 的个数 ans。至于用 DFS 还是 BFS,那都是套模板的事情了,非常简单。
复杂度分析 设网格共 n 行 m 列,格子总数为 n*m。
空间复杂度 O(n*m):grid 与 checkList 各占一个 n*m 的二维数组;此外 DFS 递归栈深度最坏情况下与连通块大小同阶,也是 O(n*m)。
登录后可查看你在本题的历史提交,以及每次的各用例通过情况。
© 2026 广州慕课网络科技有限公司 · 吴师兄学算法官网 版权所有