评测记录
#include<bits/stdc++.h>
using namespace std;
const int fx[]={0,-1,1,0,0};//N W S E
const int fy[]={0,0,0,-1,1};
struct uc{
int x,y;
int t,l;
};
int n,m,ansx,ansy;
int a[60][60][4],pd[60][60];
bool f=0;
queue<uc > q;
inline bool check(int x,int y,int t){
if(pd[x][y]==1) return 1;
if(pd[x][y+1]==1) return 1;
if(pd[x+1][y]==1) return 1;
if(pd[x+1][y+1]==1) return 1;
return 0;
}
int main(){
memset(a,-1,sizeof(a));
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>pd[i][j];
}
}
int x,y,tt;
cin>>x>>y>>ansx>>ansy;
char FX; cin>>FX;
if(FX=='N') tt=1;
if(FX=='W') tt=2;
if(FX=='S') tt=3;
if(FX=='E') tt=4;
uc tmpp={x,y,tt,-1};
q.push(tmpp);
a[x][y][tt]=0;
while(!q.empty()){
uc tmp=q.front();q.pop();
if(tmp.x==ansx&&tmp.y==ansy){
cout<<a[tmp.x][tmp.y][tmp.t];
return 0;
}
for(int i=1;i<=4;i++){
int t=tmp.t;
uc bbb;
if(i!=t&&i!=tmp.l){
int p=abs(t-i);
a[x][y][i]=a[x][y][t]+p;
t=i;
bbb.l=t;
}
for(int j=1;j<=3;j++){
int x=tmp.x+(fx[t]*j);
int y=tmp.y+(fy[t]*j);
if(check(x,y,t)) continue;
if(a[x][y][t]!=-1) continue;
a[x][y][t]=a[tmp.x][tmp.y][t]+1;
bbb.x=x;
bbb.y=y;
bbb.t=t;
q.push(bbb);
}
}
}
cout<<-1;
return 0;
}