```
#include<bits/stdc++.h>
using namespace std;
int n,m;
int dbcx[4]={0,1,0,1};
int dbcy[4]={0,0,1,1};//用于bodycheck
int sx,sy,ex,ey;
char sd;
int f[52][52];
int dx[4]={0, 1, 0, -1}, dy[4]={1, 0, -1, 0};
bool bodycheck(int bcx,int bcy) {
for(int i=0;i<4;i++) {
int nx=bcx+dbcx[i],ny=bcy+dbcy[i];
if(f[nx][ny]==0)
return false;
}
return true;
}//检查x,y这个地方能不能放下一个机器人
struct pt {
int x, y, d;
pt(): x(0), y(0), d(0) {}
pt(int _x, int _y, int _d): x(_x), y(_y), d(_d) {}
} ;
int t[60][60][4], cod[256];
// 0=E, 1=S, 2=W, 3=N, E+Right=0+1=S, E+Left=0-1=3=N
queue<pt> q;
int main()
{
cod['E']=0, cod['S']=1, cod['W']=2, cod['N']=3;
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++) {
cin>>f[i][j];
f[i][j]^=1;
}
cin>>sx>>sy>>ex>>ey>>sd;
memset(t, 0x3f, sizeof t);
t[sx][sy][cod[sd]]=0;
q.push(pt(sx, sy, cod[sd]));
while(!q.empty())
{
pt p=q.front();
q.pop();
int x=p.x, y=p.y, d=p.d, tim=t[x][y][d];
// printf("%d %d %d: %d\n", x, y, d, tim);
if (x==ex && y==ey) {
cout<<tim;
return 0;
}
if (t[x][y][(d+1)&3]>tim+1) {
t[x][y][(d+1)&3]=tim+1;
q.push(pt(x, y, (d+1)&3));
}
if (t[x][y][(d+3)&3]>tim+1) {
t[x][y][(d+3)&3]=tim+1;
q.push(pt(x, y, (d+3)&3));
}
if (t[x+dx[d]][y+dy[d]][d]>tim+1 && bodycheck(x+dx[d], y+dy[d])) {
t[x+dx[d]][y+dy[d]][d]=tim+1;
q.push(pt(x+dx[d], y+dy[d], d));
}
if (t[x+dx[d]*2][y+dy[d]*2][d]>tim+1 && bodycheck(x+dx[d], y+dy[d]) && bodycheck(x+dx[d]*2, y+dy[d]*2)) {
t[x+dx[d]*2][y+dy[d]*2][d]=tim+1;
q.push(pt(x+dx[d]*2, y+dy[d]*2, d));
}
if (t[x+dx[d]*3][y+dy[d]*3][d]>tim+1 && bodycheck(x+dx[d], y+dy[d]) && bodycheck(x+dx[d]*2, y+dy[d]*2) && bodycheck(x+dx[d]*3, y+dy[d]*3)) {
t[x+dx[d]*3][y+dy[d]*3][d]=tim+1;
q.push(pt(x+dx[d]*3, y+dy[d]*3, d));
}
}
cout<<-1;
return 0;
}
```
在下太菜,只能重构了qwq
by 1234567_scp @ 2021-11-11 15:48:32
@[SCWLine](/user/171521)
by 1234567_scp @ 2021-11-11 15:48:55
确切的说,您的代码会使前进三步进队列太晚,以至于前进一步,前进一步虽花的步数多,但比前进三步先入队。
by 1234567_scp @ 2021-11-11 15:52:15
说错了,前进一步,向左转
by 1234567_scp @ 2021-11-11 16:01:48
一组数据:
```
11 8
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 1 0 0 1 0 0
0 0 1 0 0 0 1 1
0 0 1 0 0 0 0 1
0 0 1 1 0 0 0 1
0 0 1 1 1 0 0 1
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
10 7 4 7 2
```
by 1234567_scp @ 2021-11-11 16:13:43
不知为何,您的代码会输出-1
by 1234567_scp @ 2021-11-11 16:14:19
@[1234567_scp](/user/368859) 谢谢巨佬
by SCWLine @ 2021-11-11 17:52:02