407731: GYM102888 F 推箱子

Memory Limit:512 MB Time Limit:2 S
Judge Style:Text Compare Creator:
Submit:0 Solved:0

Description

F. 推箱子time limit per test2 secondsmemory limit per test512 megabytesinputstandard inputoutputstandard output

小银在一个 n × m 的地图上玩推箱子游戏。地图上可能会有一些障碍,其他位置都是空地。小银和箱子开始时所在的位置以及目标点均是空地。

推箱子的规则如下:小银每步只能向上、向下、向左或向右移动一格。如果目标位置是障碍,或者超出了边界,那么不能这样移动。如果目标位置是箱子,那么箱子会向同一方向移动一格。如果箱子移动到的位置是障碍、箱子或者超出了边界,那么也不可以这样移动(不能同时推动多个箱子,箱子也不能占据同一个格子)。箱子到达目标点后不会消失且可以推离目标点。

幸运的是,地图中永远都只有两个箱子和两个目标点,请你求出将所有箱子推至目标点所需的最少步数,如果无解则输出 -1

Input

第一行两个整数 n, m (1 ≤ n, m ≤ 15),代表地图的行列。

接下来 n 行,每行输入一个长度为 m 的字符串,其中 "." 表示空地,"*" 表示障碍物,"#" 表示箱子,"@" 表示目标点,"s" 表示人。

保证数据中箱子数与接收点数均为 2,且人、箱子、目标点这五个点互不重合。

Output

输出一行一个整数,表示最少步数。如果无解则输出 -1

ExamplesInput
7 7
.....*@
.....*.
.#**...
..**...
...s...
.....#.
......@
Output
26
Input
4 4
##@@
s...
....
....
Output
-1
Note

样例一中人的最优移动路线如下:

人一共移动了 26 步,其中  →  代表直线移动。

样例二显然无解。

加入题单

上一题 下一题 算法标签: