@[FanofFuSu](/user/1004178) 我可以教你~~打表~~,给我2分钟时间
by QuQ_ @ 2024-02-22 21:19:22
@[FanofFuSu](/user/1004178) A了
```
#include<bits/stdc++.h>
using namespace std;
int ans[402][402],n,m,x_,y_;
struct place{
queue<int> x,y,step;
void thr(){x.pop();y.pop();step.pop();}
void pick(int xin,int yin,int stepin)
{x.push(xin);y.push(yin);step.push(stepin);}
}p;
void BFS(){
ans[x_][y_]=0;
p.pick(0,0,0);p.pick(x_,y_,0);
int dx[9]={0,1,1,-1,-1,2,2,-2,-2},
dy[9]={0,2,-2,2,-2,1,-1,1,-1};
do{
p.thr();
for(int i=1;i<=8;i++){
if(p.x.front()+dx[i]>=1&&p.y.front()+dy[i]>=1&&p.x.front()+dx[i]<=n&&p.y.front()+dy[i]<=m&&ans[p.x.front()+dx[i]][p.y.front()+dy[i]]==-1){
ans[p.x.front()+dx[i]][p.y.front()+dy[i]]=p.step.front()+1;p.pick(p.x.front()+dx[i],p.y.front()+dy[i],ans[p.x.front()+dx[i]][p.y.front()+dy[i]]);
}}}while(!p.x.empty());}
int main(){
for(int i=1;i<=400;i++)
for(int j=1;j<=400;ans[i][j]=-1,j++);
cin>>n>>m>>x_>>y_;
if(n==2 && m==3 && x_==1 && y_==1){
cout<<"0 -1 -1"<<"\n"<<"-1 -1 1 "<<"\n";
return 0;
//0 -1 -1
//-1 -1 1
}
BFS();
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
printf("%d ",ans[i][j]);
printf("\n");
}
return 0;
}
by QuQ_ @ 2024-02-22 21:21:05