code:
#include<iostream>
#include<cstring>
using namespace std;
int n,m,x,y;
int a[500][500];
bool vis[500][500];
struct node{
int x,y,step;
}p[1000001];
int pyx[10]={-2,-2,-1,1,2,2,1,-1},
pyy[10]={1,-1,-2,-2,-1,1,2,2};
int bfs(int enx,int eny)
{
vis[x][y]=1;
int head=0,tail=1,xx,yy;
p[1].x=x;
p[1].y=y;
p[1].step=0;
while(head<tail)
{
head++;
for(int i=0;i<8;i++)
{
xx=p[head].x+pyx[i];
yy=p[head].y+pyy[i];
if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&!vis[xx][yy])
{
vis[xx][yy]=1;
tail++;
p[tail].x=xx;
p[tail].y=yy;
p[tail].step=p[head].step+1;
if(xx==enx&&yy==eny)
{
return p[tail].step;
}
}
}
}
return -1;
}
int main()
{
cin>>n>>m>>x>>y;
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(i==x&&j==y) a[x][y]=0;
else memset(vis,0,sizeof(vis)),a[i][j]=bfs(i,j);
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cout<<a[i][j]<<" ";
}
cout<<"\n";
}
}
#4 #8 TLE