美团 · 广度优先搜索(BFS) · 算法编程题
美团 广度优先搜索(BFS) 时限 1 秒 / 256 MB

题目描述

在小美和小团生活的城市中,有n行m列共计n*m个十字路口,第i行j列的十字路口有两个属性a_ij,b­_ij。当行人处在i行j列的路口,对于任意非负整数k:
当时间处在[k*a_ij+k*b­_ij), (k+1)*a_ij+k*b_ij)时,行人可以选择走到i±1行j列的路口。
当时间处在[(k+1)*a_ij+k*b_ij), (k+1)*a_ij+(k+1)*b­_ij)时,行人可以选择走到i行j±1列的路口。
每次移动花费的时间为1,且要保证将要去的十字路口存在,即属于n*m个路口当中。可以选择原地静止不动。
在第0时刻,小美处在x_s行y_s列的十字路口处,要去x_t行y_t列的十字路口找小团。小团原地不动等小美,请问小美所花费的时间最少是多少?

输入输出

输入描述
第一行六个正整数n,m,x_s,y_s,x_t,y_t,含义如上文所示。以样例第一行【5、5、2、4、4、3】 共计6个数字为例,前两位数字代表有5*5的二维数组,三、四位数字代表小美处在2行4列的十字路口处,五、六位数字代表要去4行3列的十字路口找小团。
接下来n行每行m个正整数,在样例中为第一个5*5的二维数组,第i行第j个数代表i行j列十字路口的属性a_ij。
接下来n行每行m个正整数,在样例中为第二个5*5的二维数组,第i行第j个数代表i行j列十字路口的属性b_ij。
对于100%的数据,1≤n,m,x_s,y_s,x_t,y_t,a_ij,b_ij≤100。
输出描述
输出1行1个整数代表答案。

样例共 1 组

样例 1
输入
5 5 2 4 4 3
2 1 1 3 1
1 4 2 3 1
4 4 4 2 1
3 1 1 2 4
5 1 5 5 1
5 3 4 1 3
1 1 2 2 2
2 1 4 4 5
1 1 5 3 3
3 2 1 3 3
输出
3

算法解析依据充分

考点:广度优先搜索(BFS)

限制 1 秒 / 256MB | 标准输入输出

题目画像

  • 元素值域:b_ij ≤ 100(注意整数类型选择,避免溢出)
  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

推荐方向:广度优先搜索(BFS)

本题切入点

时间会改变每个路口可走的方向,把「路口 + 到达时刻」作为状态做 BFS/最短路,注意等待时间的计算。

按层扩散搜索,无权图上第一次到达即最短路。

思路框架(广度优先搜索(BFS) 通法 · 非本题专属)

  1. 起点入队并标记已访问。
  2. 每次取队首,把它的所有未访问邻居入队并记录步数。
  3. 第一次访问到目标时,步数即为最少步数。
  4. 网格类题目通常有 4(或 8)个方向,用方向数组统一处理。

实现要点:标记访问必须在入队时做,不能在出队时做,否则会重复入队甚至超时。

复杂度:时间 O(V+E) | 空间 O(V)

该范式的通法易错点

  • 出队才标记访问导致 MLE/TLE。
  • 网格边界没判,越界访问。
  • 多源 BFS 时只把第一个起点入队。

对照本题

  • 元素值域最大到 100 —— 求和 / 相乘时记得开 64 位整数。

样例

样例 1

  • 输入:5 5 2 4 4 3 / 2 1 1 3 1 / 1 4 2 3 1 / 4 4 4 2 1 / 3 1 1 2 4 / 5 1 5 5 1 / 5 3 4 1 3 / 1 1 2 2 2 / 2 1 4 4 5 / 1 1 5 3 3 / 3 2 1 3 3
  • 输出:3

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:美团2023校招技术第8场编程题。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解