描述
mzc 家十分有钱,他家里有若干个男家丁。有一天,他们把家丁们召集在一起,决定玩捉迷藏游戏。现在 mzc 要亲自去找他的男家丁,请你帮助他计算最短需要移动多少步才能找到任意一个男家丁。
游戏在一个 $ n $ 行 $ m $ 列的网格上进行,每个格子可能是:
- `m`:表示 mzc 的初始位置
- `d`:表示一个男家丁的位置(可能有多个)
- `#`:表示障碍物,不能通行
- `.`:表示空地,可以通行
mzc 每次可以向上、下、左、右四个方向移动一格,但不能走出网格或进入障碍物格子。他需要到达任意一个 `d` 格子即可抓住男家丁。
请你输出 mzc 到达最近的一个男家丁所需的最少移动步数。如果所有男家丁都无法到达,则输出 `No Way!`。
输入
第一行包含两个整数 $ n $ 和 $ m ( 3 \le n, m \le 2000 )$,分别表示网格的行数和列数。
接下来 $ n $ 行,每行包含一个长度为 $ m $ 的字符串,由字符 `m`、`d`、`#`、`.` 组成。保证网格中恰好有一个 `m` 和至少一个 `d`。
输出
如果 mzc 可以到达某个男家丁,则输出一个整数,表示最短移动步数。
否则输出 `No Way!`。
样例
- 复制
- 复制
提示
### 样例说明
mzc 位于 `(5,1)`(假设行列从1开始),一个男家丁位于 `(3,1)`,但由于障碍物阻挡,需要绕行,最短路径长度为 12。
## 数据范围与约定
- $ 3 \le n, m \le 2000 $
- 网格中仅包含 `m`、`d`、`#`、`.`。
- 恰好有一个 `m`,至少有一个 `d`。

关注我们