```
#include <bits/stdc++.h>
using namespace std;
int xnext[8] = {1,2,-1,-2,-1,2,1,-2};
int ynext[8] = {2,1,-2,-1,2,-1,-2,1};
struct Node{
int x;
int y;
int u;
};
queue<Node> q;
int main(){
int sum = 0;
int n;
int xn;
int m;
int yn;
cin>>n>>m>>xn>>yn;
bool pd[401][401];
int ans[401][401];
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
pd[i][j]=0;
ans[i][j]=-1;
}
}
q.push(Node{xn,yn,0});
while(!q.empty()){
Node p = q.front(); // 队头
int x = p.x;
int y = p.y;
if(ans[x][y]==-1){
ans[x][y]=p.u;
}
q.pop(); // 将队头元素出队
for(int i = 0 ; i < 8 ; i++){
if(x+xnext[i]<=n&&y+ynext[i]<=m&&x+xnext[i]>=1&&y+ynext[i]>=1&&!pd[x+xnext[i]][y+ynext[i]]){
pd[x+xnext[i]][y+ynext[i]]=1;
q.push(Node{x+xnext[i],y+ynext[i],p.u+1});
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<ans[i][j]<<" ";
}
cout<<endl;
}
}
by fukaluosidego @ 2023-08-01 17:10:05
thanks
by ling_xi_ @ 2023-09-05 19:23:58