你老代码错在:后来可以到那里,但是没有标记新的,和原来的一样被变成'.'了
by w23c3c3 @ 2018-07-24 11:30:19
附修改后正确代码:
```cpp
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
struct node
{
int r,c,step;
}n;
int R,C,N,a[1005],zl[4][2]={{-1,0},{1,0},{0,-1},{0,1}},x,y,vis[55][55];
char g[55][55],f[5][10]={"NORTH","SOUTH","WEST","EAST"},temp[10];
queue <node> q;
void bfs()
{
n.r=x;
n.c=y;
n.step=0;
q.push(n);
vis[x][y]=0;
while(!q.empty())
{
int u=q.front().r;
int v=q.front().c;
int s=q.front().step;
q.pop();
if(s==N)
break;
if(g[u][v]=='U')g[u][v]='*';else g[u][v]='.';
for(int i=u+zl[a[s]][0],j=v+zl[a[s]][1];g[i][j]!='X';i+=zl[a[s]][0],j+=zl[a[s]][1])
if(vis[i][j]!=s+1)
{
n.r=i;
n.c=j;
n.step=s+1;
q.push(n);
if(g[i][j]=='*'||g[i][j]=='U')g[i][j]='U';else g[i][j]='*';
vis[i][j]=n.step;
}
}
return;
}
int main()
{
scanf("%d%d",&R,&C);
memset(g,'X',sizeof(g));
for(int i=1;i<=R;i++)
for(int j=1;j<=C;j++)
{
scanf(" %c",&g[i][j]);
if(g[i][j]=='*')
{
x=i;
y=j;
}
}
scanf("%d",&N);
for(int i=0;i<N;i++)
{
scanf(" %s",temp);
for(int j=0;j<4;j++)
if(!strcmp(f[j],temp))
{
a[i]=j;
break;
}
}
bfs();
for(int i=1;i<=R;i++)
{
for(int j=1;j<=C;j++)
if(g[i][j]=='U')printf("*");else printf("%c",g[i][j]);
printf("\n");
}
return 0;
}
```
by w23c3c3 @ 2018-07-24 11:31:05
还有问题
by Mutsumi_0114 @ 2018-07-24 11:37:27
反复修改已AC
```
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
struct node
{
int r,c,step;
}n;
int R,C,N,a[1005],zl[4][2]={{-1,0},{1,0},{0,-1},{0,1}},vis[1005][55][55];
char g[55][55],f[5][10]={"NORTH","SOUTH","WEST","EAST"},temp[10];
queue <node> q;
void bfs()
{
while(!q.empty())
{
int u=q.front().r;
int v=q.front().c;
int s=q.front().step;
q.pop();
if(s==N)
break;
for(int i=u+zl[a[s]][0],j=v+zl[a[s]][1];g[i][j]!='X';i+=zl[a[s]][0],j+=zl[a[s]][1])
if(!vis[s+1][i][j])
{
n.r=i;
n.c=j;
n.step=s+1;
q.push(n);
g[i][j]='*';
vis[s+1][i][j]=true;
}
}
return;
}
int main()
{
scanf("%d%d",&R,&C);
memset(g,'X',sizeof(g));
memset(vis,false,sizeof(vis));
for(int i=1;i<=R;i++)
for(int j=1;j<=C;j++)
{
scanf(" %c",&g[i][j]);
if(g[i][j]=='*')
{
n.r=i;
n.c=j;
n.step=0;
q.push(n);
g[i][j]='.';
vis[0][i][j]=true;
}
}
scanf("%d",&N);
for(int i=0;i<N;i++)
{
scanf(" %s",temp);
for(int j=0;j<4;j++)
if(!strcmp(f[j],temp))
{
a[i]=j;
break;
}
}
bfs();
for(int i=1;i<=R;i++)
{
for(int j=1;j<=C;j++)
if(vis[N][i][j])
printf("*");
else if(g[i][j]=='X')
printf("X");
else
printf(".");
printf("\n");
}
return 0;
}
```
by Mutsumi_0114 @ 2018-07-24 11:38:13