只拿了30分,希望大佬能帮忙看看逻辑上哪里出现问题
#include<bits/stdc++.h>//0东 1南 2西 3北
using namespace std;
int n,m,fx,fy;
int cx[4][3]={{0,0,0},{-1,-2,-3},{0,0,0},{1,2,3}},cy[4][3]={{1,2,3},{0,0,0},{-1,-2,-3},{0,0,0}},cf[4]={0,-1,2,1};
bool check[55][55];
char f;
int mapp[55][55];
struct pp{
int x,y,sum,f;
}node,tmp,next;
queue <pp> p;
void bfs(){
while(!p.empty()){
tmp=p.front();
p.pop();
if(tmp.x==fx&&tmp.y==fy){
cout<<tmp.sum;
return;
}
for(int j=0;j<4;j++){
next=tmp;
if(cf[j]==2){
tmp.f=(tmp.f+cf[j])%4;
tmp.sum+=2;
}
else if(cf[j]==1){
tmp.f=(tmp.f+cf[j])%4;
tmp.sum++;
}else if(cf[j]==-1){
tmp.f=(tmp.f+4+cf[j])%4;
tmp.sum++;
}
for(int i=0;i<3;i++){
if(mapp[tmp.x+cx[tmp.f][i]][tmp.y+cy[tmp.f][i]]==1) break;
if(check[tmp.x+cx[tmp.f][i]][tmp.y+cy[tmp.f][i]]&&tmp.x+cx[tmp.f][i]<=n&&tmp.y+cy[tmp.f][i]<=m&&tmp.y+cy[tmp.f][i]>1&&tmp.x+cx[tmp.f][i]>1){
check[tmp.x+cx[tmp.f][i]][tmp.y+cy[tmp.f][i]]=false;
node.x=tmp.x+cx[tmp.f][i];
node.y=tmp.y+cy[tmp.f][i];
node.f=tmp.f;
node.sum=tmp.sum;
node.sum++;
p.push(node);
}
}
tmp=next;
}
}
cout<<"-1";
}
int main(){
memset(check,true,sizeof(check));
char temp;
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>mapp[i][j];
}
}
cin>>node.x>>node.y>>fx>>fy>>temp;
switch(temp){
case 'S':
node.f=1;
break;
case 'E':
node.f=0;
break;
case 'W':
node.f=2;
break;
case 'N':
node.f=3;
break;
}
for(int i=1;i<=n+1;i++){
for(int j=1;j<=n+1;j++){
if(mapp[i][j]==1) mapp[i-1][j]=mapp[i-1][j-1]=mapp[i][j-1]=1;
}
}
fx++;
fy++;
node.sum=0;
node.x++;
node.y++;
check[node.x][node.y]=false;
p.push(node);
bfs();
return 0;
}