#524. 起火迷宫
起火迷宫
问题描述
一个迷宫可以看作一个 行 列的方格矩阵。
其中一些格子是空地,用 . 表示,其他格子是障碍,用 # 表示。开始时,乔位于一个空地格子中(用 J 表示)。迷宫中有一些空地已经起火(用 F 表示),且火尚未蔓延到乔所在的位置。
乔每单位时间可以向上下左右四个方向移动一格(不能进入障碍格 #)。火每单位时间也会蔓延到相邻的上下左右空地(同样被障碍阻挡)。如果一个格子已经着火,或者在乔进入该格子的时刻恰好着火,则该格子对乔来说是危险的,乔不能进入该格子。
当乔进入任意位于边界的空地格子时,他可以再花费 个单位时间直接逃出迷宫(即到达边界的下一时间步视作逃脱成功)。求乔逃离迷宫所需的最少时间;如果无法逃离,输出 IMPOSSIBLE。
输入格式
- 第一行包含两个整数 ()。
- 接下来 行,每行包含 个字符,表示迷宫地图。字符集仅包含
#、.、J、F。地图中恰有一个J(乔),可能有多个F(火源)。
输出格式
- 若乔可以逃离迷宫,输出一个整数,表示逃离所需的最少时间;
- 否则输出
IMPOSSIBLE(大写字母)。
样例输入1
4 4
####
#JF#
#..#
#..#
样例输出1
3
样例输入2
3 3
###
#J.
#.F
样例输出2
IMPOSSIBLE