AT_s8pc_5_e Broken Skateboard
题目描述
编码员 E869120 正在考虑去溜冰场,溜冰场的大小为 $H \times W$ 。左上角单元格为 $(1,1)$ ,右下角单元格为 $(H,W)$ 。
溜冰场由 $1$ 个球门单元格、一些冰单元格和一些混凝土单元格组成。
溜冰场的特征如下:
- 滑冰者在冰格上移动时方向一致。
- 滑冰者只有在停止时才能改变方向。
- 如果滑冰者滑到了球门单元,他/她就完成了比赛。但是,如果滑冰者来到滑冰场外,则无法完成游戏。
此外,他的滑板坏了,因此移动速度会发生如下变化:
- 移动一个格子需要 $k$ 秒。最初, $k$ 为 $1$ 。
- 如果滑板滑到水泥格上, $k$ 将增加 $1$ 。
- 他只能向 4 个方向移动:上、下、左、右。
他想知道每个起始格完成游戏所需的最短时间。
请写出代替 E869120 的程序。
输入格式
在 $1$ 行中,给出了滑行链路 $H$ $W$ 的大小。
从 $2$ 行到 $H+1$ 行,给出了滑行链路的状态。每个单元格的状态表示如下:
- `.` 表示该单元是冰单元。
- `#` 表示该单元格为混凝土单元格。
- `G` 表示该单元是目标单元。
输出格式
$d_{i,j}$ 表示从 $(i,j)$ 单元格开始计算的最短时间。如果他无法从 $(i,j)$ 单元格到达目标单元格,则 $d_{i,j}$ 的值为 $-1$ 。
说明/提示
- $1 \leq H \leq 777$ .
- $1 \leq W \leq 777$ .
- 具体单元的数量不超过 $7 \ 777$ 。
- 目标单元的数量正好是 $1$ 。