#include<bits/stdc++.h>
using namespace std;
int n,m,x,y,a[1005][1005],tx,ty;
int xx[9]={0,-2,-2,-1,-1,2,2,1,1};
int yy[9]={0,-1,1,-2,2,-1,1,-2,2};
queue<int>X,Y,ds;
void BFS(int x,int y)
{
while(!X.empty())X.pop();
while(!Y.empty())Y.pop();
while(!ds.empty())ds.pop();
X.push(x);
Y.push(y);
ds.push(1);
while(!X.empty())
{
x=X.front();
y=Y.front();
a[x][y]=ds.front();
if(x==n&&y==m)return;
for(int i=1;i<=9;i++)
{
tx=x+xx[i];
ty=y+yy[i];
if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&a[tx][ty]==0)
{
X.push(tx);
Y.push(ty);
ds.push(ds.front()+1);
}
}
X.pop();
Y.pop();
ds.pop();
}
}
int main()
{
cin>>n>>m>>x>>y;
BFS(x,y);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
printf("%-5d",a[i][j]-1);
cout<<"\n";
}
return 0;
}
两点WA,其余TLE。