这道题本来是bfs但本蒟蒻对bfs实在是不熟悉
只好来打dfs了
有没有大佬帮帮我嘛
#include<iostream>
using namespace std;
int n,m,a,ans=1<<30,xc,yc,xm,ym;
bool flag[55][55];
bool foot[55][55];
int f[55][55];
char ff;
short m1[5]={0,-1,0,0,1};
short m2[5]={0,0,-1,1,0};
void dfs(int x,int y,int sum,int fx,int zg){
if(x==xm&&y==ym){
ans=min(ans,sum);
return ;
}
if((f[x][y]!=0&&sum>=f[x][y])||sum>=ans) return ;
f[x][y]=sum;
for(int i=1;i<=4;i++){
if(i==fx) continue;
int mx=x+m1[i],my=y+m2[i];
if(flag[mx][my]||flag[mx+1][my]||flag[mx][my+1]||flag[mx+1][my+1]) continue;
if(mx<1||mx>n||my<1||my>m) continue;
if(foot[mx][my]) continue;
dfs(mx,my,sum+2,i,1);
}
int mx=x+m1[fx],my=y+m2[fx];
if(flag[mx][my]||flag[mx+1][my]||flag[mx][my+1]||flag[mx+1][my+1]) return ;
if(mx<1||mx>n||my<1||my>m) return ;
if(foot[mx][my]) return ;
foot[mx][my]=1;
if(zg>=1&&zg<3) dfs(mx,my,sum,fx,zg+1);
else dfs(mx,my,sum+1,fx,1);
foot[mx][my]=0;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
cin>>a;
flag[i][j]=a;
}
cin>>xc>>yc>>xm>>ym>>ff;
if(ff=='E') dfs(xc,yc,0,3,0);
else
if(ff=='S') dfs(xc,yc,0,4,0);
else
if(ff=='W') dfs(xc,yc,0,2,0);
else
if(ff=='N') dfs(xc,yc,0,1,0);
if(ans==1<<30) cout<<-1<<endl;
else cout<<ans<<endl;
return 0;
}
//东E,南S,西W,北N