#P50832. 「JOISC 2016 Day 4」危险的滑冰

「JOISC 2016 Day 4」危险的滑冰

题目描述

题目译自 JOISC 2016 Day4 T1 「危険なスケート

JOI 君喜欢在自然形成的大冰场上滑冰。

这个冰场可以用一个南北 RR 格,东西 CC 格的矩形表示。从北起第 rr 行,从西起第 cc 列的单元格表示为 (r,c)(r,c)。对于每个单元格,要么 JOI 君可以通过,要么有冰块阻挡,JOI 君不能通过。此外,在矩形四周的单元格内都有冰块,所以滑冰者不能从冰场里滑出去。也就是说,(i,1),(i,C) (1iR)(i,1),(i,C)\ (1\le i\le R)(1,j),(R,j) (1jC)(1,j),(R,j)\ (1\le j\le C) 这些单元格都是有冰块的。

JOI 君不太会滑冰,在冰场里滑冰时,他会向东西南北四个方向之一蹬一下所处方格,然后停在恰好要撞上冰块之前的一个方格中。从一次蹬冰开始到停下来结束称为一次移动。如果蹬冰方向的相邻格有冰块,就不能向那个方向移动。

一天,当 JOI 滑冰时,他发现当他蹬一下冰后,那个方格上就会出现冰块。冰块不会因为 JOI 通过某个格子而产生,只会因为蹬冰而产生。继续呆在这个冰场上十分危险,所以 JOI 君想尽快离开这个冰场。

JOI 君目前在 (r1,c1)(r_1,c_1),为了从这个冰场离开,他需要停在出口 (r2,c2)(r_2,c_2) 上。请帮 JOI 计算至少需要移动多少次才能从目前位置离开冰场。由于冰场状况和你目前的位置的不同,JOI 君有可能无论如何移动都无法停在出口。注意 JOI 君必须要停在出口上,滑过出口是不可以的。

输入格式

第一行两个整数 R,CR,C,表示这个冰场南北有 RR 格,东西有 CC 格;

接下来 RR 行,每行 CC 个字符,字符只包含 .# 两种。第 rr 行第 cc 个字符如果是 .,表示这个格子可以通过,如果是 # 则表示这个格子上有冰块,不能通过;

接下来一行两个整数 r1,c1r_1,c_1,表示 JOI 君目前在 (r1,c1)(r_1,c_1) 处;

接下来一行两个整数 r2,c2r_2,c_2,表示出口在 (r2,c2)(r_2,c_2) 处。

输出格式

输出一行一个整数,如果 JOI 君能从冰场离开,则输出最少移动次数,否则输出 1-1

样例 1

5 5
#####
#...#
#...#
#...#
#####
2 2
3 3
4

对于样例一,初始状态如下图,其中白色方形表示冰块,J 表示 JOI 君的初始位置,E 表示出口位置。

skate1.png

首先,JOI 君向东移动,之后冰场状态如下图:

skate2.png

之后,JOI 君按顺序向西,南,北移动,最后停在了出口处。所以输出 44,因为不可能在 33 步或以下停在出口处。

8 6
######
#..#.#
##...#
#....#
#.#..#
#....#
##...#
######
4 3
6 4
5
5 5
#####
#.#.#
#.#.#
#.#.#
#####
2 2
4 4
-1
3 3
###
#.#
###
2 2
2 2
0

在样例 4 中,注意 JOI 君目前所在地可以是出口,最少移动次数为 00

数据范围与提示

对于所有数据,满足 3R,C103,1r1,r2R,1c1,c2C3\le R,C\le 10^3,1\le r_1,r_2\le R,1\le c_1,c_2\le C。输入保证 (i,1),(i,C) (1iR)(i,1),(i,C)\ (1\le i\le R)(1,j),(R,j) (1jC)(1,j),(R,j)\ (1\le j\le C) 这些单元格都是冰块,并且 (r1,c1)(r_1,c_1)(r2,c2)(r_2,c_2) 这两个单元格没有冰块。

详细子任务及附加条件如下表:

子任务编号 附加条件 分值
11 R,C10R,C\le 10,并且保证答案小于等于 1010 1313
22 R,C200R,C\le 200 6565
33 无附加限制 2222