代码更新后对了3个点【捂脸】
代码如下
希望大神帮忙
```cpp
#include<bits/stdc++.h>
using namespace std;
int g[100][100];
int used[100][100][100];
struct point
{
int x,y,step;
char di;//di表示现在所面向的方向
};
point jqr(int i,point n)
{
if(i == 0)
{
if(n.di == 'E' && g[n.x][n.y] == 0 && g[n.x+1][n.y] == 0) n.x++;
else if(n.di == 'W' && g[n.x][n.y] == 0 && g[n.x-1][n.y] == 0) n.x--;
else if(n.di == 'N' && g[n.x][n.y] == 0 && g[n.x][n.y-1] == 0) n.y--;
else if(n.di == 'S' && g[n.x][n.y] == 0 && g[n.x][n.y+1] == 0) n.y++;
}
else if(i == 1)
{
if(n.di == 'E' && g[n.x][n.y] == 0 && g[n.x+1][n.y] == 0 && g[n.x+2][n.y] == 0) n.x += 2;
else if(n.di == 'W' && g[n.x][n.y] == 0 && g[n.x-1][n.y] == 0 && g[n.x-2][n.y] == 0) n.x -= 2;
else if(n.di == 'N' && g[n.x][n.y] == 0 && g[n.x][n.y-1] == 0 && g[n.x][n.y-2] == 0) n.y -= 2;
else if(n.di == 'S' && g[n.x][n.y] == 0 && g[n.x][n.y+1] == 0 && g[n.x][n.y+2] == 0) n.y += 2;
}
else if(i == 2)
{
if(n.di == 'E' && g[n.x][n.y] == 0 && g[n.x+1][n.y] == 0 && g[n.x+2][n.y] == 0 && g[n.x+3][n.y] == 0) n.x += 3;
else if(n.di == 'W' && g[n.x][n.y] == 0 && g[n.x-1][n.y] == 0 && g[n.x-2][n.y] == 0 && g[n.x-3][n.y] == 0) n.x -= 3;
else if(n.di == 'N' && g[n.x][n.y] == 0 && g[n.x][n.y-1] == 0 && g[n.x][n.y-2] == 0 && g[n.x][n.y-3] == 0) n.y -= 3;
else if(n.di == 'S' && g[n.x][n.y] == 0 && g[n.x][n.y+1] == 0 && g[n.x][n.y+2] == 0 && g[n.x][n.y+3] == 0) n.y += 3;
}
else if(i == 3)//向左转
{
if(n.di == 'E' && g[n.x][n.y] == 0) n.di = 'N';
else if(n.di == 'W' && g[n.x][n.y] == 0) n.di = 'S';
else if(n.di == 'N' && g[n.x][n.y] == 0) n.di = 'W';
else if(n.di == 'S' && g[n.x][n.y] == 0) n.di = 'E';
}
else if(i == 4)//向右转
{
if(n.di == 'E' && g[n.x][n.y] == 0) n.di = 'S';
else if(n.di == 'W' && g[n.x][n.y] == 0) n.di = 'N';
else if(n.di == 'N' && g[n.x][n.y] == 0) n.di = 'E';
else if(n.di == 'S' && g[n.x][n.y] == 0) n.di = 'W';
}
n.step++;
return n;
}
point q[10000000];
int main()
{
int n,m,sn,sm,dn,dm,f=1,t=1,ans=-1;
char fc;
memset(used,-1,sizeof(used));
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&g[i][j]);
scanf("%d %d %d %d %c",&sn,&sm,&dn,&dm,&fc);
q[f].di = fc,q[f].step = 0,q[f].x = sn,q[f].y = sm;
if(sn == dn && sm == dm)
{
printf("0");
return 0;
}
while(f <= t)
{
point u = q[f++],v;
for(int i=0;i<5;i++)
{
v = jqr(i,u);
if(v.x >= n || v.y >= m || v.x < 1 || v.y < 1 || g[v.x][v.y] == 1) continue;
if(v.x == dn && v.y == dm)
if(ans < 0 || ans > v.step)
ans = v.step;
if(used[v.x][v.y][v.di] == -1 || used[v.x][v.y][v.di] > v.step)
{
q[++t] = v;
used[v.x][v.y][v.di] = v.step;
}
}
}
printf("%d",ans);
return 0;
}
```
by xyt07code @ 2020-07-29 15:51:48
@[xyt07code](/user/360964) 才发现,**机器人在格点上啊**
by littlefrog @ 2021-03-01 15:43:41