Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
175685 | 谢宗晋 | 机器人搬重物 | C++ | 解答错误 | 0 | 0 MS | 280 KB | 1939 | 2024-08-21 10:12:40 |
#include<bits/stdc++.h> using namespace std; const int N=55; struct dot{ int x,y,face; }; int a[N][N],dis[N][N][5]; int n,m,sx,sy,ex,ey; char faceto; void BFS(){ queue<dot> q; int intface; if(faceto=='E')intface=1; if(faceto=='S')intface=2; if(faceto=='W')intface=3; if(faceto=='N')intface=4; q.push(dot({sx,sy,intface})); dis[sx][sy][intface]=0; while(!q.empty()){ dot t=q.front(); if(t.x==ex&&t.y==ey)return; q.pop(); for(int i=1;i<=3;i++){ int tx,ty; if(t.face==1)tx=t.x,ty=t.y+i; if(t.face==2)tx=t.x,ty=t.y-i; if(t.face==3)tx=t.x+i,ty=t.y; if(t.face==4)tx=t.x-i,ty=t.y; if(tx<=1||ty<=1||tx>=n||ty>=m)continue; if(a[tx][ty]==-1)continue; if(i==3){ int ttx,tty; if(t.face==1)ttx=t.x,tty=t.y+1; if(t.face==3)ttx=t.x,tty=t.y-1; if(t.face==2)ttx=t.x+1,tty=t.y; if(t.face==4)ttx=t.x-1,tty=t.y; if(a[ttx][tty]==-1)continue; } if(dis[tx][ty][t.face]==0x3f3f3f3f){ q.push({tx,ty,t.face}); dis[tx][ty][t.face]=dis[t.x][t.y][t.face]+1; } } int left[5]={-1,4,1,2,3}; if(dis[t.x][t.y][left[t.face]]==0x3f3f3f3f){ q.push({t.x,t.y,left[t.face]}); dis[t.x][t.y][left[t.face]]=dis[t.x][t.y][t.face]+1; } int right[5]={-1,2,3,4,1}; if(dis[t.x][t.y][right[t.face]]==0x3f3f3f3f){ q.push({t.x,t.y,right[t.face]}); dis[t.x][t.y][right[t.face]]=dis[t.x][t.y][t.face]+1; } } } int main(){ cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ int t; cin>>t; if(t==1){ a[i][j]=-1; a[i][j+1]=-1; a[i+1][j]=-1; a[i+1][j+1]=-1; } } } cin>>sx>>sy>>ex>>ey>>faceto; n++,m++; sx++,sy++,ex++,ey++; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ for(int k=1;k<=4;k++){ if(a[i][j]==-1)dis[i][j][k]=-1; else dis[i][j][k]=0x3f3f3f3f; } } } BFS(); int ans=0x3f3f3f3f; for(int i=1;i<=4;i++){ ans=min(ans,dis[ex][ey][i]); } if(ans==0x3f3f3f3f)cout<<-1; else cout<<ans; return 0; }