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!。
5 6 .#..#. ....#. d..... #####. m.....
12
mzc 位于 (5,1)(假设行列从1开始),一个男家丁位于 (3,1),但由于障碍物阻挡,需要绕行,最短路径长度为 12。
m、d、#、.。m,至少有一个 d。