```cpp
// luogu-judger-enable-o2
#include<iostream>
#include<queue>
#include<utility>
#include<cstdio>
#include<cstring>
using namespace std;
const int dx[]={1,1,2,2,-1,-1,-2,-2};
const int dy[]={-2,2,-1,1,-2,2,-1,1};
bool is_ok(int x,int y,int n,int m){
return x<=n&&y<=m&&x>=1&&y>=1;
}
queue<pair<int,int> >q;
int mp[405][405];
int main(){
memset(mp,-1,sizeof(mp));
int n,m,fx,fe;
cin>>n>>m>>fx>>fe;
q.push(make_pair(fx,fe));
mp[fx][fe]=0;
while(!q.empty()){
pair<int,int>t=q.front();
q.pop();
int x=t.first,y=t.second;
for(int i=0;i<8;i++){
int nx=x+dx[i];
int ny=y+dy[i];
if(is_ok(nx,ny,n,m)&&mp[nx][ny]==-1){
mp[nx][ny]=mp[x][y]+1;
q.push(make_pair(nx,ny));
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
printf("%-5d",mp[i][j]);
printf("\n");
}
return 0;
}
```
by sss7020 @ 2019-03-27 17:20:39