P1443 求调
#include<bits/stdc++.h>
#define a first
#define b second
using namespace std;
const int N=410;
typedef pair<int,int>PII;
int n,m,x1,y1;
int dis[N][N];
PII q[N*N];
int dx[]={2,2,1,1,-1,-1,-2,-2},dy[]={1,-1,2,-2,2,-2,1,-1};
void bfs(int x,int y){
memset(dis,-1,sizeof(dis));
q[0]={x1,y1};
dis[x1][y1]=0;
int hh=0,tt=0;
while(hh<=tt){
auto t=q[hh++];
for(int i=0;i<8;i++){
int xx=t.a+dx[i],yy=t.b+dy[i];
if(xx<1||xx>n||yy<1||yy>m)continue;
if(dis[xx][yy]>=0)continue;
dis[xx][yy]=dis[t.a][t.b]+1;
q[++tt]={xx,yy};
}
}
}
int main(){
scanf("%d %d %d %d",&n,&m,&x1,&y1);
bfs(x1,y1);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
printf("%-5d",dis[i][j]);
}
printf("\n");
}
return 0;
}