题目描述
有一个 n×mn \times mn×m 的棋盘,在某个点 (x,y)(x, y)(x,y) 上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步。
输入格式
输入只有一行四个整数,分别为 n,m,x,yn, m, x, yn,m,x,y。
输出格式
一个 n×mn \times mn×m 的矩阵,代表马到达某个点最少要走几步(左对齐,宽 555 格,不能到达则输出 −1-1−1)。
输入输出样例
输入 #1
3 3 1 1
输出 #1
0 3 2 3 -1 1 2 1 4
说明/提示
数据规模与约定
对于全部的测试点,保证 1≤x≤n≤4001 \leq x \leq n \leq 4001≤x≤n≤400,1≤y≤m≤4001 \leq y \leq m \leq 4001≤y≤m≤400。
#include<bits/stdc++.h>
using namespace std;
int n,m,sx,sy,cx[8]={1,1,2,2,-1,-1,-2,-2},cy[8]={2,-2,1,-1,2,-2,1,-1},s,a[401][401],l,r,b[401][401];
struct s
{
int x;
int y;
int p;
}d[40001];
void bfs()
{
d[0].x=sx;d[0].y=sy;d[0].p=0;a[sx][sy]=0;
int t,w=1;
while(t<w)
{
for(int i=