3730 - 逃出城堡
描述

小 Biu 被困在一个城堡中,城堡可以看成一个大小为 n*n 的二维平面上的网格图,每一个格子要么为平地,要么为墙壁,要么为毒区。而且作为毒区的格子,每一秒会向他周围的上下左右四个格子扩散毒气(毒气不能穿过墙壁)。
现在小 Biu 身负重托,最开始小 Biu 在某一个平地上,他每一秒可以向他的上下左右四个格子中为平地的格子移动一步。他想知道如果不能穿越墙壁,也不能接触有毒气的格子(如果毒气和小 Biu 同时到达某个平地,也算接触),他最少需要多长时间才能逃出城堡。只要从任何一个边缘走出城堡都算逃出城堡。
例如('*' 为毒区,'#' 为墙壁,'S' 为起点):
.*...
....#
.*..#
#S..#
.##.#
只要小 Biu 先向右移动两步,再向下移动两步,即可逃出城,所以答案为 4。

输入

第 1 行:一个整数 n,表示城堡的大小是一个 n*n 的网格图(1 <= n <= 1000)。
第 2 - n+1 行:每一行有 n 个字符,'.' 表示平地,'*' 表示有毒气的格子,'#' 表示墙壁,'S' 表示小 Biu 最开始的位置。

输出

输出一个整数表示答案,如果小 Biu 不能逃出城堡则输出 "IMPOSSIBLE"(不带引号)。

样例

输入

5
.*...
....#
.*..#
#S..#
.##.#

输出

4
提示

两次 BFS。第一次从所有 '*' 做多源 BFS 求出每个格子被毒气覆盖的最早时刻 fire[r][c]。第二次从小 Biu 的起点 BFS:设当前在第 t 秒位于 (r,c),若 (r,c) 位于边缘,则再走一步跨出城堡即可逃出,答案为 t+1;否则向四邻 (nr,nc) 移动,要求是平地/起点、未访问过、且 fire[nr][nc] > t+1(毒气必须严格晚于小 Biu 到达该格的时刻,同时到达算接触)。若 BFS 结束仍未到达任何边缘格,输出 IMPOSSIBLE。

来源
51nod 2603
标签
题目参数
时间限制 1 秒
内存限制 128 MB
提交次数 2
通过次数 1