给定一个由 n
行 m
列组成的二维迷宫,其中 n × m ≤ 2 × 105
。每个格子要么是 墙(不可通行),要么是 路(可通行)。迷宫中存在 一扇门 和 一把钥匙,且它们的坐标互不相同。
你从起点 (0, 0)
出发,希望到达终点 (n-1, m-1)
。移动规则如下:
每次可以向 上、下、左、右 四个方向移动一格。
如果目标格子是 墙,则无法移动。
门 所在的格子 只有拿到钥匙后才能通过,否则无法进入。
钥匙 所在的格子可以自由进入,并且 一旦到达钥匙的位置,就视为永久持有钥匙。
你的任务是确定是否能够走出迷宫(到达终点)。如果可以输出"YES" ,否则返回输出"NO"。
第一行包含两个整数 n 和 m,表示迷宫的行数和列数。
接下来的 n 行,每行包含 m 个字符,表示迷宫地图:
'.' 表示 路(可通行)。
'#' 表示 墙(不可通行)。
'D' 表示 门(仅能持钥匙通过)。
'K' 表示 钥匙(拾取后永久持有)。
保证 'D' 和 'K' 各出现一次。
输出一个整数,表示从 (0, 0) 到 (n-1, m-1) 的最短路径步数。如果无法到达,输出 -1。