题目传送门sx
搜一下
注意输出格式
#include <iostream>
#include <cstdio>
using namespace std;
int n,m,s,t,ans[410][410],bushu[100000];
bool vis[410][410];
int tiao[8][2]={{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2},{1,-2},{2,-1}};
void bb()
{
int h=0,ta=1,d[100000][2];
d[1][0]=s,d[1][1]=t;ans[s][t]=0;
vis[s][t]=1;
while(h<ta){
h++;
for(int i=0;i<8;i++){
int u=d[h][0]+tiao[i][0],v=d[h][1]+tiao[i][1];
if(u<1||v<1||u>n||v>m||vis[u][v]) continue;
vis[u][v]=1;
d[++ta][0]=u,d[ta][1]=v;
bushu[ta]=bushu[h]+1;
ans[u][v]=bushu[ta];
}
}
}
int main()
{
cin>>n>>m>>s>>t;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
ans[i][j]=-1;
bb();
for(int i=1;i<=n;i++,printf("\n"))
for(int j=1;j<=m;j++)
printf("%-5d",ans[i][j]);
return 0;
}