44分求调,调对者必关
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m,dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
cin>>n>>m;
int b[n+3][m+3],x,y,sx,sy;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>b[i][j];
if(b[i][j]==2)
{
x=i;
y=j;
}
}
}
int h=0,t=1,q[n*m+3][5];
bool bb[n+3][m+3];
q[1][1]=0;
q[1][2]=6;
q[1][3]=x;
q[1][4]=y;
bb[x][y]=1;
while(h<t)
{
h++;
for(int i=0;i<4;i++)
{
int xx=q[h][3]+dx[i];
int yy=q[h][4]+dy[i];
q[t][2]=q[h][2]-1;
q[t][1]=q[h][1]+1;
if(b[xx][yy]==0||q[t][2]==0||bb[xx][yy]==1||xx>n||xx<1||yy>m||yy<1)
{
continue;
}
else if(b[xx][yy]==4)
{
t++;
bb[xx][yy]=1;
q[t][2]=6;
q[t][3]=xx;
q[t][4]=yy;
}
else if(b[xx][yy]==1)
{
t++;
bb[xx][yy]=1;
q[t][3]=xx;
q[t][4]=yy;
}
else if(b[xx][yy]==3)
{
t++;
cout<<q[t][1]<<' ';
return 0;
}
}
}
cout<<-1;
return 0;
}