运用了坐标,bfs,memset
#include<bits/stdc++.h>
struct point
{
int x;
int y;
};
using namespace std;
queue<point>q;
int dx[]={1,2,2,1,-1,-2,-2,-1};
int dy[]={2,1,-1,-2,-2,-1,1,2};
const int N=410;
int dist[N][N];
int n,m,x,y;
void bfs(int x,int y)
{
memset(dist,-1,sizeof dist);
q.push({x,y});
point t;
dist[x][y]=0;
while(!q.empty())
{
t=q.front();
q.pop();
for(int i=0;i<8;i++)
{
int a=t.x+dx[i],b=t.y+dy[i];
if(a<1||a>n||b<1||b>m||dist[a][b]>=0)continue;
q.push({a,b});
dist[a][b]=dist[t.x][t.y]+1;
}
}
}
int main()
{
scanf("%d%d%d%d",&n,&m,&x,&y);
bfs(x,y);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
printf("%-5d",dist[i][j]);
}
cout<<endl;
}
return 0;
}