红温了,有没有大佬帮忙修改一下
#include<iostream>
#include<queue>
using namespace std;
int arr[505][505],dir[5][3]={{0,0},{0,-1},{-1,0},{0,1},{1,0}};
bool vis[505][505];
struct node{
int x,y,step,dire;
};
int main(){
int num,n,m,sx,sy,fx,fy;cin>>m>>n;
char s;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>arr[i][j];
}
}
cin>>sx>>sy>>fx>>fy>>s;
if(s=='S'){num=1;}
if(s=='N'){num=3;}
if(s=='W'){num=2;}
if(s=='E'){num=4;}
queue<node> q;
q.push({sx,sy,0,num});
vis[sx][sy]=1;
while(!q.empty()){
node t=q.front();
q.pop();
vis[t.x][t.y]=1;
if(t.x==fx&&t.y==fy){cout<<t.step;return 0;}
int nn=t.dire;
int nx=t.x+dir[nn][0];
int ny=t.y+dir[nn][1];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&vis[nx][ny]==0&&arr[nx][ny]==0){
q.push({nx,ny,t.step+1,t.dire});
vis[nx][ny]=1;
nx+=dir[nn][0];
ny+=dir[nn][1];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&vis[nx][ny]==0&&arr[nx][ny]==0){
q.push({nx,ny,t.step+1,t.dire});
vis[nx][ny]=1;
nx+=dir[nn][0];
ny+=dir[nn][1];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&vis[nx][ny]==0&&arr[nx][ny]==0){
q.push({nx,ny,t.step+1,t.dire});
vis[nx][ny]=1;
}
}
}
if(t.dire==1){q.push({t.x,t.y,t.step+1,4});}
if(t.dire==1){q.push({t.x,t.y,t.step+1,2});}
if(t.dire==3){q.push({t.x,t.y,t.step+1,4});}
if(t.dire==3){q.push({t.x,t.y,t.step+1,2});}
if(t.dire==2){q.push({t.x,t.y,t.step+1,3});}
if(t.dire==2){q.push({t.x,t.y,t.step+1,1});}
if(t.dire==4){q.push({t.x,t.y,t.step+1,3});}
if(t.dire==4){q.push({t.x,t.y,t.step+1,1});}
}
cout<<-1;
return 0;
}