30分求助

P1126 机器人搬重物

这也是30分的,那里错了? ```cpp #include<cstdio> #include<queue> using namespace std; const int direction[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; const char EWSN[5]={'E','W','S','N'}; int n,m,sx,sy,ex,ey; int map[100][100]={0}; bool gone[100][100]={0},condition[100][100][5]={0}; struct Robot { int x,y,direct,time;//0:east;1:west;2:south;3:north. }; queue <Robot>Q; int main() { scanf("%d%d",&n,&m); for (register int i=1;i<=n;i++) for (register int j=1;j<=m;j++) { int read1; scanf("%d",&read1); if (read1) map[i][j]=map[i-1][j]=map[i][j-1]=map[i-1][j-1]=1; } char read; scanf("%d%d%d%d %c",&sy,&sx,&ey,&ex,&read); Robot start; for (int i=0;i<4;i++) if (read==EWSN[i]) start.direct=i; start.time=0; start.x=sx; start.y=sy; Q.push(start); gone[sx][sy]=1; condition[sx][sy][start.direct]=1; while (!Q.empty()) { Robot a=Q.front(),b; Q.pop(); if (a.x==ex&&a.y==ey) { printf("%d",a.time); return 0; } if (a.time>5000) { printf("-1"); return 0; } for (int r=1;r<=3;r++) { b.x=a.x+r*direction[a.direct][0]; b.y=a.y+r*direction[a.direct][1]; if(b.x<1||b.x>n&&b.y<1||b.y>m||map[b.x][b.y]) break; if(!condition[b.x][b.y][a.direct]) { b.direct=a.direct; b.time=a.time+1; condition[b.x][b.y][b.direct]=1; Q.push(b); } } switch (a.direct) { case 0: case 1: b.direct=2; if(!condition[a.x][a.y][b.direct]) { b.x=a.x; b.y=a.y; b.time=a.time+1; condition[b.x][b.y][b.direct]=1; Q.push(b); } b.direct=3; if(!condition[a.x][a.y][b.direct]) { b.x=a.x; b.y=a.y; b.time=a.time+1; condition[b.x][b.y][b.direct]=1; Q.push(b); } break; case 2: case 3: b.direct=0; if(!condition[a.x][a.y][b.direct]) { b.x=a.x; b.y=a.y; b.time=a.time+1; condition[a.x][a.y][b.direct]=1; Q.push(b); } b.direct=1; if(!condition[a.x][a.y][b.direct]) { b.x=a.x; b.y=a.y; b.time=a.time+1; condition[b.x][b.y][b.direct]=1; Q.push(b); } break; } } printf("-1"); return 0; } ```
by jiande @ 2018-08-09 16:29:01


|