进圈
Description
龙龙最近迷上了一款名叫 PUBG(PLAYERUNKNOWN’S BATTLEGROUNDS)的手游,那是一款关乎生存挑战的 RPG 逃亡游戏。
考虑到游戏的环节过于复杂,龙龙决定简化一下场景:整个地图可以看做一个长为 n 宽为 m 的二维格点平面。龙龙需要从(x1,y1)逃亡到(x2,y2)以逃离毒圈,但有些格点上存在障碍#不能行走,有些格点是沙地.。龙龙只能移动在允许行走的沙地上,同时每一时刻,龙龙只能朝着当前位置周围的上、下、左、右四个方向移动。同时因为龙龙使用了能量饮料,每分钟最多可以朝着一个方向行走 k 步。
毒圈快要来啦,请你帮龙龙尽快安排一下可行的路线,使得它能够以最短的时间顺利进圈。
Input
第一行输入三个正整数 n,m 和 k(1 ≤ n,m,k ≤ 1000)表示地图的大小还有龙龙每分钟最多可以移动的步数;
接下来 n 行,每行包含 m 个字符,其中第 i 行第 j 个字符表示坐标(i,j)的路况,它可能是#,这表示这个格点是障碍区,不能行走,也可能是.表示沙地;
最后一行输入四个正整数 x1,y1,x2,y2 由空格间隔开,表示龙龙的初始位置和目标位置。
Output
请输出一个正整数 t,表示龙龙从(x1,y1)到(x2,y2)进圈最少需要的时间(分钟),如果龙龙最终不能进圈,则请输出-1。
Hint
对于样例,龙龙第一分钟走 4 步,从(1,3)到(1,1),第二分钟从(1,1)到(3,1),第三分钟从(3,1)走到(3,3)顺利进圈。
代码如下:
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
const int num=1000+50;
const int zy[]={
0,0,1,-1}; //表示左右
const int sx[]={
1,