萌新求助,修不动了

P1126 机器人搬重物

``` #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


|