不太清楚错在哪里,求助。
#include <bits/stdc++.h>
using namespace std;
const int N = 55;
int a[N][N];
int n, m;
int si, sj, ti, tj, dir;
// WNES
int dx[] = {0, -1, 0, 1};
int dy[] = {-1, 0, 1, 0};
int ans = -1;
struct node {
int i;
int j;
int dir;
int step;
};
void bfs() {
queue<node> que;
bool vis[N][N][4] = {};
que.push((node){si, sj, dir, 0});
vis[si][sj][dir] = 1;
while (que.size()) {
node x = que.front(); que.pop();
if (x.i == ti && x.j == tj) {
ans = x.step;
return;
}
for (int i=1; i<=3; i++) {
if (vis[x.i+dx[x.dir]][x.j+dy[x.dir]][dir]) continue;
if (!(1<x.i+dx[x.dir] && x.i+dx[x.dir]<n && 1<x.j+dy[x.dir] && x.j+dy[x.dir]<m)) continue;
if (a[x.i+dx[x.dir]][x.j+dy[x.dir]] == 1) continue;
vis[x.i+dx[x.dir]][x.j+dy[x.dir]][dir] = 1;
que.push((node){x.i+dx[x.dir], x.j+dy[x.dir], dir, x.step+1});
}
int j = (x.dir+1)%4;
if (vis[x.i][x.j][j] == 0) {
vis[x.i][x.j][j] = 1;
que.push((node){x.i, x.j, j, x.step+1});
}
j = (x.dir+3)%4;
if (vis[x.i][x.j][j] == 0) {
vis[x.i][x.j][j] = 1;
que.push((node){x.i, x.j, j, x.step+1});
}
}
}
int main() {
cin >> n >> m;
for (int i=1; i<=n; i++) {
for (int j=1; j<=m; j++) {
int x;
cin >> x;
if (x) {
a[i][j] = 1;
a[i+1][j] = 1;
a[i][j+1] = 1;
a[i+1][j+1] = 1;
}
}
}
n++, m++;
cin >> si >> sj >> ti >> tj;
si++, sj++, ti++, tj++;
string temp, fang="WNES";
cin >> temp;
dir = fang.find(temp);
bfs();
cout << ans << endl;
return 0;
}