#3179. 贪吃的Jerry(jerry)

贪吃的Jerry(jerry)

题目背景

贪吃的 Jerry 闻到了 Tom 家橱柜里的奶酪香气,于是悄悄潜入。橱柜中散布着障碍物,Jerry 的脚上抹了油,这让他移动起来非常迅速,但也带来了一个致命问题——他无法中途刹车!

题目描述

橱柜是一个 n×mn \times m 的网格矩阵,其中 xx 为行号(从上到下编号为 1n1 \sim n),yy 为列号(从左到右编号为 1m1 \sim m)。网格中 00 表示空地,11 表示障碍物。

移动规则

Jerry 每次只能选择上、下、左、右四个方向之一开始滑行,一旦启动,他将沿着该直线方向不停移动,直到遇到以下情况之一才会停止:

  • 撞上障碍物(即下一个格子为 11),此时停在障碍物前的最后一个空地格子;
  • 滑出网格边界,此时停在边界内的最后一个空地格子。 每次完整的滑行过程计为 11 次滑行。

任务目标

Jerry 从起始坐标 (x1,y1)(x_1, y_1) 出发,目标是到达奶酪所在的坐标 (x2,y2)(x_2, y_2)。若滑行结束时停在奶酪所在的格子,即视为偷取成功。请你计算 Jerry 偷取奶酪所需的最少滑行次数;若无法在 kk 次内到达,输出 1-1(超过k次Jerry就来抓老鼠了!)。

限制条件

Jerry 最多只能进行 kk 次滑行,否则 Tom 就会发现 Jerry。

输入格式

第一行三个正整数 n,m,kn, m, k,分别表示网格的行数、列数和 Jerry 最多能进行的滑行次数。 接下来 nn 行,每行 mm 个整数(0011),表示网格矩阵。 最后一行四个整数 x1,y1,x2,y2x_1, y_1, x_2, y_2,分别表示 Jerry 的起始坐标和奶酪的坐标。

输出格式

输出一行一个整数,表示最少滑行次数;若无法在 kk 次内到达,输出 1-1

输入输出样例 #1

输入 #1

4 5 5
0 0 1 0 0
0 0 0 0 0
1 0 1 0 1
0 0 0 0 0
1 5 4 1

输出 #1

3

输入输出样例 #2

输入 #2

3 5 100
0 1 0 0 0
1 1 1 1 1
0 0 0 1 0
1 5 3 3

输出 #2

-1

输入输出样例 #3

输入 #3

4 5 2
0 0 1 0 0
0 0 0 0 0
1 0 1 0 1
0 0 0 0 0
1 5 4 1

输出 #3

-1

说明/提示


样例 #1 解释

对于样例 #1:

  • 起点为 (1,5)(1, 5),终点为 (4,1)(4, 1),最多可滑行 55 次,最少仅需 33 次即可到达:
  1. 11 次滑行:从起点 (1,5)(1, 5) 向左滑行,遇到障碍物 (1,3)(1, 3),停在 (1,4)(1, 4)(滑行次数:11)。
  2. 22 次滑行:从 (1,4)(1, 4) 向下滑行,滑至网格下边界,停在 (4,4)(4, 4)(滑行次数:22)。
  3. 33 次滑行:从 (4,4)(4, 4) 向左滑行,滑至网格左边界,停在 (4,1)(4, 1),成功到达终点(滑行次数:33,未超过限制)。 因此输出为 33

数据范围

1n,m10001 \le n, m \le 1000 1k1061 \le k \le 10^6 1x1,x2n1 \le x_1, x_2 \le n 1y1,y2m1 \le y_1, y_2 \le m

保证起点与终点均为空地(即值为 00 的格子),且位于网格边缘。