代码如下,大佬帮帮org
#include<bits/stdc++.h>
using namespace std;
int n,m,a,b,c,d;
char di;
int f[155][155];
int p[120005][5];
char pp[1200005][5];
int w[105][105][105];
void bfs(int x,int y){
p[1][0]=x;
p[1][1]=y;
pp[1][2]=di;
p[1][3]=0;
int t=1,h=1;
while(h<=t){
//
//cout<<p[h][3]<<":"<<p[h][0]<<" "<<p[h][1]<<" "<<pp[h][2]<<endl;
//
if(pp[h][2]=='N')
for(int j=1;j<=3;j++) {
if(f[p[h][0]-j][p[h][1]]==1) break;
if(p[h][0]-j>=2&&w[p[h][0]-j][p[h][1]]['N'-'0']==0){
t++;
p[t][0]=p[h][0]-j;
p[t][1]=p[h][1];
pp[t][2]='N';
p[t][3]=p[h][3]+1;
w[p[h][0]-j][p[h][2]]['N'-'0']=1;
if(p[t][0]==c+1&&p[t][1]==d+1) {
printf("%d",p[t][3]);
exit(0);
}
}
}
if(pp[h][2]=='S')
for(int j=1;j<=3;j++) {
if(f[p[h][0]+j][p[h][1]]==1) break;
if(p[h][0]+j<=n&&w[p[h][0]+j][p[h][1]]['S'-'0']==0){
t++;
p[t][0]=p[h][0]+j;
p[t][1]=p[h][1];
pp[t][2]='S';
p[t][3]=p[h][3]+1;
w[p[h][0]+j][p[h][2]]['S'-'0']=1;
if(p[t][0]==c+1&&p[t][1]==d+1) {
printf("%d",p[t][3]);
exit(0);
}
}
}
if(pp[h][2]=='E')
for(int j=1;j<=3;j++){
if(f[p[h][0]][p[h][1]+j]==1) break;
if(p[h][1]+j<=m&&w[p[h][0]][p[h][1]+j]['E'-'0']==0){
t++;
p[t][0]=p[h][0];
p[t][1]=p[h][1]+j;
pp[t][2]='E';
p[t][3]=p[h][3]+1;
w[p[h][0]][p[h][1]+j]['E'-'0']=1;
if(p[t][0]==c+1&&p[t][1]==d+1) {
printf("%d",p[t][3]);
exit(0);
}
}
}
if(pp[h][2]=='W')
for(int j=1;j<=3;j++) {
if(f[p[h][0]][p[h][1]-j]==1) break;
if(p[h][1]-j>=2&&w[p[h][0]][p[h][1]-j]['W'-'0']==0){
t++;
p[t][0]=p[h][0];
p[t][1]=p[h][1]-j;
pp[t][2]='E';
p[t][3]=p[h][3]+1;
w[p[h][0]][p[h][1]-j]['W'-'0']=1;
if(p[t][0]==c+1&&p[t][1]==d+1) {
printf("%d",p[t][3]);
exit(0);
}
}
}
if(pp[h][2]=='N'||pp[h][2]=='S') {
if(w[p[h][0]][p[h][1]]['E'-'0']==0){
t++;
p[t][0]=p[h][0];
p[t][1]=p[h][1];
pp[t][2]='E';
p[t][3]=p[h][3]+1;
w[p[h][0]][p[h][1]]['E'-'0']=1;
}
if(w[p[h][0]][p[h][1]]['W'-'0']==0){
t++;
p[t][0]=p[h][0];
p[t][1]=p[h][1];
pp[t][2]='W';
p[t][3]=p[h][3]+1;
w[p[h][0]][p[h][1]]['W'-'0']=1;
}
}
if(pp[h][2]=='W'||pp[h][2]=='E') {
if(w[p[h][0]][p[h][1]]['N'-'0']==0){
t++;
p[t][0]=p[h][0];
p[t][1]=p[h][1];
pp[t][2]='N';
p[t][3]=p[h][3]+1;
w[p[h][0]][p[h][1]]['N'-'0']=1;
}
if(w[p[h][0]][p[h][1]]['S'-'0']==0){
t++;
p[t][0]=p[h][0];
p[t][1]=p[h][1];
pp[t][2]='S';
p[t][3]=p[h][3]+1;
w[p[h][0]][p[h][1]]['S'-'0']=1;
}
}
h++;
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
int yy;
scanf("%d",&yy);
if(yy==1)
f[i][j]=f[i][j+1]=f[i+1][j]=f[i+1][j+1]=1;
}
scanf("%d%d%d%d",&a,&b,&c,&d);
cin>>di;
if(a==c&&b==d) {
printf("0");
return 0;
}
w[a][b][di-'0']=1;
bfs(a+1,b+1);
printf("-1");
}