AC代码:
```cpp
#include<bits/stdc++.h>
using namespace std;
const int N=1005;
const int dx[]={-1,-2,-2,-1,1,2,2,1};
const int dy[]={-2,-1,1,2,2,1,-1,-2};
#define Len 8
bool vis[N][N];
int dis[N][N];
int n,m,sx,sy;
struct node
{
int x,y;
};
void bfs(int a,int b)
{
queue<node> q;
int nx,ny;
node cur;
dis[a][b]=0;
vis[a][b]=true;
q.push((node){a,b});
while(!q.empty())
{
cur=q.front();
q.pop();
for(int i=0;i<Len;i++)
{
nx=dx[i]+cur.x;
ny=dy[i]+cur.y;
if(nx<1||nx>n||ny<1||ny>m) continue;
if(vis[nx][ny]) continue;
dis[nx][ny]=dis[cur.x][cur.y]+1;
vis[nx][ny]=true;
q.push((node){nx,ny});
}
}
return;
}
int main()
{
memset(dis,-1,sizeof(dis));
cin>>n>>m>>sx>>sy;
bfs(sx,sy);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(dis[i][j]==0&&i!=sx&&j!=sy)
{
if(j==m)
{
cout<<-1;
}
else cout<<-1<<" ";
}
else
{
if(j==m)
{
cout<<dis[i][j];
}
else
{
cout<<dis[i][j]<<" ";
}
}
}
cout<<endl;
}
return 0;
}
```
by hzy_Q @ 2024-01-23 10:08:48