#include<bits/stdc++.h>
using namespace std;
const int MAXN=4e2;
const int dx[]={ 0, 1, 2,-1,-2, 1, 2,-1,-2};
const int dy[]={ 0, 2, 1, 2, 1,-2,-1,-2,-1};
struct node{
int x;int y;int step;
}f,q[MAXN*MAXN+5];
int n,m,x,y,head=1,tail=0;
int Map[MAXN+5][MAXN+5];
void csh(){
Map[x][y]=0;
q[++tail].step=0;
q[tail].x=x;
q[tail].y=y;
}
void bfs(){
while(head<=tail){
node u=q[head++];
for(int i=1;i<=8;i++){
node v;
v.x=u.x+dx[i];
v.y=u.y+dy[i];
v.step=u.step+1;
if(v.x<0) continue;
if(v.y<0) continue;
if(v.x>n) continue;
if(v.x>m) continue;
if(Map[v.x][v.y]==-1) Map[v.x][v.y]=v.step;
else continue;
q[++tail]=v;
}
}
}
int main(){
scanf("%d%d%d%d",&n,&m,&x,&y);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
Map[i][j]=-1;
}
}
csh();
bfs();
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
printf("%d ",Map[i][j]);
}
putchar('\n');
}
return 0;
}
以上为代码。
蒟蒻求助,勿喷。