xiaofeng_and_xiaoyu @ 2023-06-29 19:28:35
#include<bits/stdc++.h>
using namespace std;
int r[101][101];
int t[101][101];
queue<int> x;
queue<int> y;
int dx[8];
int dy[8];
int main(){
int a,b,c,d,nx=0,ny=0,wx,wy;
cin>>a>>b>>c>>d;
dx[0]=c;
dx[1]=c;
dx[2]=-1*c;
dx[3]=-1*c;
dx[4]=d;
dx[5]=d;
dx[6]=-1*d;
dx[7]=-1*d;
dy[5]=c;
dy[7]=c;
dy[4]=-1*c;
dy[6]=-1*c;
dy[1]=d;
dy[0]=d;
dy[3]=-1*d;
dy[2]=-1*d;
for(int i=1;i<=a;i++){
for(int j=1;j<=a;j++){
cin>>r[i][j];
if(r[i][j]==3){
nx=i;
ny=j;
x.push(i);
y.push(j);
}
if(r[i][j]==4){
wx=i;
wy=j;
}
}
}
while(1){
t[nx][ny]+=1;
r[nx][ny]=0;
for(int i=0;i<8;i++){
if(dx[i]+nx<=a&&dx[i]+nx>0&&dy[i]+ny>=b&&dy[i]+ny<=0&&r[nx+dx[i]][ny+dy[i]]==1){
x.push(dx[i]+nx);
y.push(dy[i]+ny);
t[dx[i]+nx][dy[i]+ny]=t[nx][ny];
}
}
x.pop();
y.pop();
if(nx==wx&&ny==wy){
break;
}
}
cout<<t[wx][wy];
return 0;
}
手打BFS,没什么经验