评测地址
#include <bits/stdc++.h>
using namespace std;
struct pt
{
int x,y,l;
}tpt;
int dx[]={2,2,1,1,-1,-1,-2,-2};
int dy[]={1,-1,2,-2,2,-2,1,-1};
int main()
{
int n,m,sx,sy,tx,ty;
scanf("%d%d%d%d",&n,&m,&sx,&sy);
bool bk[n+1][m+1],f;
for(int ex=1;ex<=n;ex++,printf("\n"))
for(int ey=1;ey<=m;ey++)
{
if(ex==sx&&ey==sy) printf("0\t");
else
{
for(int i=0;i<=n;i++)
for(int j=0;j<=m;j++)
bk[i][j]=true;
queue<pt> bfs;
tpt.x=sx;tpt.y=sy;tpt.l=0;bfs.push(tpt);bk[sx][sy]=false;f=true;
while(!bfs.empty())
{
if(bfs.front().x==ex&&bfs.front().y==ey) {printf("%d\t",bfs.front().l);f=false;break;}
for(int i=0;i<8;i++)
{
tx=bfs.front().x+dx[i];
ty=bfs.front().y+dy[i];
if(1<=tx&&tx<=n&&1<=ty&&ty<=m&&bk[tx][ty]){tpt.x=tx;tpt.y=ty;tpt.l=bfs.front().l+1;bfs.push(tpt);bk[tx][ty]=false;}
}
bfs.pop();
}
if(f)
printf("-1\t");
}
}
return 0;
}