问题描述
有一个用网格表示的溜冰场,其中有H行和W列。记(i,j)为从上往下数第i行,从左往右数第j列的方格。
溜冰场上有N个障碍物。第i个障碍物位于(Xi,Yi)处。
在一次移动中,高桥选择上、下、左、右四个方向之一并继续移动,直到撞到一个障碍物为止。当他撞到障碍物时,他停在障碍物前面的方格上。由于溜冰场被悬崖围绕,禁止开始一次移动且永远不会撞到障碍物。
高桥最初位于(sx,sy)处。他想要进行一些移动以停在(gx,gy)处。
找出达到(gx,gy)所需的最小移动次数。如果不可能达到,则报告该事实。
约束条件
- 1≤H≤109
- 1≤W≤109
- 1≤N≤105
- 1≤sx,gx≤H
- 1≤sy,gy≤W
- 1≤Xi≤H
- 1≤Yi≤W
- (sx,sy)=(gx,gy)
- (sx,sy)=(Xi,Yi)
- (gx,gy)=(Xi,Yi)
- 如果i=j,则(Xi,Yi)=(Xj,Yj)。
- 输入中的所有值都是整数。
输入
输入格式如下,从标准输入读入:
H W N
sx sy
gx gy
X1 Y1
X2 Y2
⋮
XN YN
输出
输出打印出达到(gx,gy)所需的最小移动次数。
如果无法到达,则打印-1
。
示例输入1
7 8 7
3 4
5 6
1 4
2 1
2 8
4 5
5 7
6 2
6 6
示例输出1
4

在图中,(sx,sy)用S
表示,(gx,gy)用G
表示。
通过移动$(3,4)\\rightarrow(2,4) \\rightarrow(2,2) \\rightarrow(5,2) \\rightarrow(5,6)$,他可以在4次移动后到达(gx,gy)。
示例输入2
4 6 2
3 2
3 5
4 5
2 5
示例输出2
-1

他必须停在(gx,gy)处。
注意,只是通过(gx,gy)并不被认为是达到目标。
示例输入3
1 10 1
1 5
1 1
1 7
示例输出3
-1

如果他选择向左移动,高桥会在通过(gx,gy)后掉下悬崖。
请注意,由于溜冰场被悬崖围绕,禁止开始一次移动且永远不会撞到障碍物。