SP7422 ESCJAILA - Escape from Jail Again
题目描述
新建了一所国际通用罪犯监狱(ICPC),你的老朋友哈利被关押在那里。和以前一样,这所新 ICPC 是世界上最安全的监狱之一。它由一位资深游戏玩家设计,因此监狱并不一定是封闭的,但只有极其逻辑严密且思维敏捷的人才能逃出去。
新的 ICPC 可以用一个方格网格表示。每个格子可以是空的,或者包含一堵墙、一扇门、一个开门按钮或一个关门按钮。哈利被安置在一个空格子里,并且所有门都是关闭的。尽管如此,哈利告诉你他会尝试逃跑。每次哈利在一个格子中时,他可以在一步内移动到相邻的格子(即与他当前位置共享一条边的格子)。每次哈利踩到一个包含开门按钮的格子时,所有的门都会打开;而每次他踩到一个包含关门按钮的格子时,所有的门都会关闭。哈利可以在监狱内随意走动,但他不能移动到包含墙的格子,也不能在门关闭时移动到包含门的格子。
为了逃离监狱,哈利需要走到外面,这意味着他需要站在边缘的一个格子上,然后朝远离监狱的方向再走一步。
你得到了一张监狱的地图,哈利值得你的建议。告诉他他需要的最小步数来逃脱,或者警告他没有逃脱的方法。
输入格式
每组测试数据使用多行描述。第一行包含两个整数 $N$ 和 $M$,分别表示表示监狱的网格的行数和列数($1 \leq N, M \leq 100$)。接下来的 $N$ 行每行包含一个长度为 $M$ 的字符串,其中第 $j$ 个字符表示该行的第 $j$ 个格子。这个字符串只包含以下字符,并具有相应的含义:“H” 表示哈利初始所在的空格子;“.” 表示哈利不在其中的空格子;“W” 表示一堵墙;“D” 表示一扇门;“O” 表示一个开门按钮;“C” 表示一个关门按钮。你可以假设每组测试数据中恰好有一个字符 “H”。输入结束标志是一行包含两个 −1。
输出格式
对于每组测试数据,输出一行,包含一个整数,表示哈利逃脱监狱所需的最小步数,如果他无法逃脱,则输出 −1。
说明/提示
- $1 \leq N, M \leq 100$
- 每组测试数据中恰好有一个字符 “H”
- 字符集仅包含 “H”, “.”, “W”, “D”, “O”, “C”